给定一个包含orchards的数据库集合,一个对象如下所示:
{
"orchardId" : ObjectId("5391c137722b051908000000"),
"trees" : [
{
"name" : "apple",
"fruits" : []
},
{
"name" : "pear",
"fruits" : [
ObjectId("54c54291d93236150f00004e"),
ObjectId("54c542c9d93236150f000062")
]
}
]
}
我想动态地将水果添加到特定树中。我知道我可以用mongo做到这一点:
db.orchards.update(
({"orchardId": ObjectId("5391c137722b051908000000")},
{"trees" : { $elemMatch: {"name":"apple"}}}),
{ $push: { "trees.$.fruits": ObjectId("54c542c9d900000000001234") }}
)
所以,如果我对,这应该是mongoose:
orchards.update(
({"orchardId": ObjectId.fromString(orchard.id)},
{"trees" : {$elemMatch: {"name": "apple"}}}),
{$push: {"trees.$.fruits": ObjectId("54c542c9d900000000001234") }},function(err, data){ ...
但后来我收到一条错误说:[TypeError:无法调用方法'路径'未定义的]
看起来mongoose无法处理位置运算符($
),因为当我用0更改$时它确实有效。
如何在mongoose中完成这项工作?
答案 0 :(得分:0)
在你的代码示例中,你有parens你应该有大括号,所以它应该是这样的:
orchards.update({
"orchardId": ObjectId(orchard.id),
"trees": {$elemMatch: {"name": "apple"}}
},
{$push: {"trees.$.fruits": ObjectId("54c542c9d900000000001234") }},
function(err, data){ ...