mongoDB の 1 つのドキュメント内に多数の json ファイルを挿入する
概要
質問があります: しかし、1 つのドキュメント コレクション内に多数の json ファイルを挿入するにはどうすればよいでしょうか? 各 ID 製品の json ファイルを生成する mongoDB に接続された Ruby スクリプトがあります。 mongo では、次のような構造が必要です。
Id(document's name) : {
many json for same ID
}
Rubyでこの構造を取得するにはどうすればよいですか?
DBの名前は「test_db」、コレクションの名前は「test_coll」です。
コードは次のとおりです:
Client = Mongo::Client.new([127.0.0.1:27017], :dtaabase => paperino)
json_array ={}
my_hash =Hash.new{}
my_array = Array.new
coll = Client[:ID_product]
Json ファイルを作成するための機密データを追加します
my_hash = JSON.parse(json_array.to_json)
my_array = my_hash
coll.update({{id: single_id_product} {"$push" => {json:
my_array}},{upsert:true})
Ruby スクリプトは 1 つの id_product に対してさらに json ファイルを生成します
1つの製品のすべてのjsonファイルを1つのドキュメント内に保存したいのですが、 古典的な insert.many または insert one を試してみましたが、1 つの json に対して 1 つのドキュメントを生成するため、機能しませんでした。
1つのドキュメント内にすべてのjson配列を追加する方法を試しましたが、うまくいきません。
どのようにできるのか? ありがとう
解決策
MongoDB のドキュメントはフィールドと値のペアで構成されます。通常、ドキュメントを識別するための ObjectID 値を含む _id フィールドと、ドキュメントのデータを保持する追加フィールドがあります。例:
doc = {
_id: BSON::ObjectId('650aeca18772677bb6613a89'),
name: "foo"
}
上記のドキュメントは、insert_one を介してコレクションに挿入できます。
coll.insert_one(doc)
埋め込みデータについても同様です。 data という配列:
doc = {
_id: BSON::ObjectId('650aee198772677bb6613a8a'),
data: [
{ name: 'foo' },
{ name: 'bar' }
]
}
coll.insert_one(doc)
既存の配列に新しい値を追加するには、次の演算子があります。
coll.update_one(
{ _id: BSON::ObjectId('650aee198772677bb6613a8a') },
{ '$push': { data: { name: 'baz' } } }
)
複数の値を配列に追加するには、修飾子とともに使用できます。
coll.update_one(
{ _id: BSON::ObjectId('650aee198772677bb6613a8a') },
{ '$push': { data: { '$each': [ { name: 'qux' }, { name: 'quux' } ] } } }
)
上記の変更後のドキュメントは次のようになります。
coll.find(_id: BSON::ObjectId('650aee198772677bb6613a8a')).first
#=> {
# "_id"=>BSON::ObjectId('650aee198772677bb6613a8a'),
# "data"=>[
# {"name"=>"foo"},
# {"name"=>"bar"},
# {"name"=>"baz"},
# {"name"=>"qux"},
# {"name"=>"quux"}
# ]
# }