0

この問題を解決するために 1 週​​間以上苦労しました。これを解決するのを手伝ってくれる人はいますか。

私はデータバッグモンゴを持っています。データバッグの内容は次のとおりです。

{ "firstuser": {
"id": "firstuser",
"password": "123",
"db": "mydb",
"role": "readWrite"
},
"seconduser": {
"id": "seconduser",
"password": "123",
"db": "mydb",
"role": "readWrite"
},
"thirduser": {
"id": "thirduser",
"password": "123",
"db": "mydb",
"role": "read"
},
"id": "users"
}

MongoDB でユーザーを作成するために、データバッグをループしたいと考えています。これが私が思いついたものです(そしてもっと多くの無駄な試み)

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.each_pair do | user, values |
log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )"
end

上記のスクリプトの出力は次のとおりです。

  1. log[レコードの出力: db.createUser( { user: 'firstuser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] action write
  2. log[レコードの出力: db.createUser( { user: 'seconduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] action write
  3. log[レコードの出力: db.createUser( { user: 'thirduser', pwd: '123', roles: [ { role: 'read', db: 'mydb' } ] } ) ] action write
  4. log[レコードの出力: db.createUser( { user: '', pwd: '', roles: [ { role: '', db: '' } ] } ) ] action write

行 4 を見てください。空のレコードが含まれています。ループも ("id": "users") を使っているようです。このエントリを除外する方法はありますか?

これを証明するために、"id": "users", "password": "123" を追加した結果、2 つの余分な空のレコードが作成されました。

したがって、("id": "users") を除外する必要があります。どうすればこれを達成できますか?

4

2 に答える 2

0

値のオブジェクト タイプのフィルタを設定できます:-

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.values.each do | values |
    log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )" if !values.is_a? (String)
end

また

users_databag_item = data_bag_item('mongodb', 'users')
users_databag_item.each_pair do | id, values |
    log "db.createUser( { user: '#{values['id']}', pwd: '#{values['password']}', roles: [ { role: '#{values['role']}', db: '#{values['db']}' } ] } )" if !id.eql? "id"
end
于 2016-09-07T14:07:12.227 に答える