【发布时间】:2015-03-20 11:43:30
【问题描述】:
我有一份文件:
{
"_id" : ObjectId("550c00f81bcc15211016699b"),
"name" : "book3",
"author" : "mno",
"publisher" : "pub",
"testa" : [
{
"item1" : "item1",
"item2" : "item2"
}
]
}
我要做的就是在 testa 中添加另一个项目,例如:
{
"_id" : ObjectId("550c00f81bcc15211016699b"),
"name" : "book3",
"author" : "mno",
"publisher" : "pub",
"testa" : [
{
"item1" : "item1",
"item2" : "item2",
"item3 : "item3"
}
]
}
我尝试过使用
db.books.update(
{ "author":"mno" },
{ $addToSet: { testa : {"item3":"item3"} } }
)
这给了
{
"_id" : ObjectId("550c05261bcc15211016699c"),
"name" : "book3",
"author" : "mno",
"publisher" : "pub",
"testa" : [
{
"item1" : "item1",
"item2" : "item2"
},
{
"item3" : "item3"
}
]
}
我试过了
db.books.update(
{ "author":"mno" , "testa.item1" : "item1"},
{ $set : {"testa.0" : {"item3":"item3"}}},
{upsert : true / false}
)
这给了
{
"_id" : ObjectId("550c05fa1bcc15211016699d"),
"name" : "book3",
"author" : "mno",
"publisher" : "pub",
"testa" : [
{
"item3" : "item3"
}
]
}
我是不是做错了什么,我到处检查 Insert an embedded document to a new field in mongodb document 和 Update or replace an embedded document in MongoDB collection
我尝试了一些奇怪的事情...但是....请帮助我正确查询
我还使用 C# 驱动程序尝试了这些 喜欢
WriteConcernResult res = booksColl.Update(query, Update.Set("testa.$.item1", "itemedited"),UpdateFlags.Upsert);
【问题讨论】:
-
使用这种模式,在数组对象具有动态键的文档上执行写操作会有点困难。如果您足够灵活,我建议您更改架构以使
testa数组包含具有以下结构的元素,例如[{"name": "item1", "value": "item1"}, {"name": "item2", "value": "item2"}]然后您可以通过db.books.update( { "author":"mno" }, { $addToSet: { "testa": {"name": "item3", "value": "item3"}} } )更新它 -
谢谢。我实际上也在想同样的事情,但是我需要重新设计整个架构,所以......除了删除整个数组并重新插入它之外,没有办法做到这一点
标签: mongodb mongodb-query mongodb-.net-driver