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

时间:2015-01-26 19:53:51

标签: node.js mongodb mongoose

给定一个包含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中完成这项工作?

1 个答案:

答案 0 :(得分:0)

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

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