我有一个问题: 但是如何在一个文档集合中插入许多 json 文件呢? 我有一个与 mongoDB 连接的 ruby 脚本,它为每个 ID 产品生成 json 文件。 在 mongo 中我应该想要这样的结构:
Id(document's name) : {
many json for same ID
}
如何在 ruby 中获得这个结构?
数据库的名称是“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 或插入一个但不起作用,因为为 1 个 json 生成 1 个文档。
我尝试方法 $push 将所有 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)
$push
运算符:
coll.update_one(
{ _id: BSON::ObjectId('650aee198772677bb6613a8a') },
{ '$push': { data: { name: 'baz' } } }
)
要将多个值附加到数组,您可以将 $push
与
$each
修饰符一起使用:
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"}
# ]
# }