给定一个包含果园的数据库集合,一个对象如下所示:

{
"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") }}
)


所以,如果我是对的,这应该是猫鼬的:

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


但是然后我收到一条错误消息:[TypeError:无法调用未定义的方法'path']

看起来猫鼬无法处理位置运算符($),因为当我将$更改为0时,它确实起作用。

我如何用猫鼬做这项工作?

最佳答案

在代码示例中,您已在括号中有括号的地方,因此应改为:

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

10-02 13:20