我有一個分配給一個變量的對象,如:在MongoDB中,如何使用變量中的對象更新數組中的對象?
var child = {
{
_id: 'ObjectID("16e7f7baa05c3a9d751363")',
title: 'Testing',
sort: 3,
active: true
}
下不工作,老老實實我不確定什麼我失蹤:
db.category.update(
{ _id: "thisistheparentdocumentsid", "children._id": child._id },
{
$set: {
"children.$.title": child.title,
"children.$.active": child.active,
"children.$.sort": child.sort
}
}
);
我真正想要的做,因爲我想重複使用這種方法,而不是以後重複自己:
db.category.update(
{ _id: "thisistheparentdocumentsid", "children._id": child._id },
{
$set: {
"children" : child
}
}
);
這也行不通。我引用這個帖子:Update array element by id with mongo query
除了:http://docs.mongodb.org/manual/reference/operator/update/positional/
但我的查詢是行不通的。我在這裏錯過了些什麼?
---編輯---
下面是結果,當我查詢基於我傳遞數據到服務器,如...方法父文檔
db.category.findOne({ "_id" : "9dYgKdfFczgiRcNouij"});
{
"title" : "ParentTest",
"active" : true,
"children" : [
{
"_id" : ObjectId("680d55c6995ef6f0748278c2"),
"title" : "ChildTest",
"active" : true
},
{
"_id" : ObjectId("2b4469c1a4c8e086942a1233"),
"title" : "ChildTest2"
"active" : true
}
],
"_id" : "9dYgKdfFczgiRcNouij"
}
。調用(「UpdateCommand」,id,child);
變量id是文檔的父ID,而孩子是我提到的對象。我使用child._id.toString()來生成匹配的ObjectId(「...」);我使用child._id.toString()生成匹配的ObjectId(「...」);我使用child._id.toString
所以更具體:
db.category.update(
{ _id: id, "children._id": child._id.toString() },
{
$set: {
"children.$.title": child.title,
"children.$.active": child.active,
"children.$.sort": child.sort,
"children.$.uppercase": child.title.toUpperCase()
}
}
);
然而,這是行不通的。我在想我的選擇器是關閉的,但是我可以用相同的方法使用findOne(),它會返回適當的文檔,並使用$ elemMatch返回數組中的指定子項。
任何我可能會丟失的東西?我已經通過console.log運行了所有的值,以確保我能夠得到它們,而我是。
我剛剛在我的問題的底部添加了更多詳細信息,字面上與您的答案同時。現在閱讀你的答案,但是如果你願意回顧我的更新? – user1447679 2014-10-05 03:17:57
@ user1447679已經看到了。數組中有多少元素並不重要。我自己的修改反映了這個。如果你的parentId是一個字符串(奇怪的是你在這裏混合類型),那麼它是一個字符串。 – 2014-10-05 03:19:27
我在通過服務器上的更新方法發送之前記錄子對象,它看起來像這樣: Object {_id:「ObjectID(」19636533c66b0fd89f72f4b1「)」,title:「Testing」,sort:2 ,active:true} ObjectID被用引號括起來看起來不正確嗎?我想知道它是否以字符串形式發送。 – user1447679 2014-10-05 03:33:14