Mongo查询(带位置运算符)在mongoose中不起作用

给定一个带有果树的数据库集合,一个对象看起来像这样:

{ "orchardId" : ObjectId("5391c137722b051908000000"), "trees" : [ { "name" : "apple", "fruits" : [] }, { "name" : "pear", "fruits" : [ ObjectId("54c54291d93236150f00004e"), ObjectId("54c542c9d93236150f000062") ] } ] } 

我想dynamic地将一个水果添加到特定的树。 我知道我可以用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:不能调用未定义的方法'path'

它看起来像mongoose不能处理位置操作符( $ ),因为当我改变$为0它确实工作。

我如何在mongoose上做这项工作?

在你的代码示例中,你已经有了你应该有大括号的parens,所以它应该是这样的:

 orchards.update({ "orchardId": ObjectId(orchard.id), "trees": {$elemMatch: {"name": "apple"}} }, {$push: {"trees.$.fruits": ObjectId("54c542c9d900000000001234") }}, function(err, data){ ...