【发布时间】:2014-10-05 02:50:42
【问题描述】:
我有一个对象赋值给一个变量,比如:
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"
}
我正在向服务器传递数据,例如... Method.call("UpdateCommand", id, child);
变量id是文档的父id,子是我提到的对象。
我使用 child._id.toString() 来生成匹配的 ObjectId("...");
更具体地说:
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 运行了所有值,以确保我得到它们,而且我是。
【问题讨论】:
标签: javascript mongodb mongodb-query