我正在尝试更新子数组的子文档,但我不能指望元素在数组中的位置始终相同,那么我该如何更新它。
例如,这是我的文档,我只想将另一个标签对象(key/val)推送到pdf的tags
数组:1和real_pagenum
_id
ObjectId("50634e26dc7c22c64d00000a")
{
"_id" : ObjectId("503b83dfad79cc8d26000004"),
"pdfs" : [
{
"_id" : ObjectId("50634e26dc7c22c64d00000a"),
"pages" : [
{
"real_pagenum" : 1,
"_id" : ObjectId("50634e74dc7c22c64d00002b"),
"tags" : [
{
"key" : "Item",
"val" : "foo"
},
{
"key" : "Item",
"val" : "bar"
}
]
},
{
"real_pagenum" : 2,
"_id" : ObjectId("50634e74dc7c22c64d00002b")
}
],
"title" : "PDF3",
"version" : 3
}
],
}
重申一下,目标是首先定位正确的 pdf by _id
,然后是正确的 page byreal_pagenum
并推入该 pdf 的页面tags
数组。
我试过:
db.projects.update({'pdfs.pdf_id':ObjectId("50634e25dc7c22c64d000007")},
{$push:{'pages.$.tags':{'key':'foo','val':'bar'}}},false,false);
但这并没有达到我需要的水平。我读过我可以使用位置运算符与实际元素位置的组合,但同样,我不能保证或知道元素的位置。