gpt4 book ai didi

node.js - Mongo 查询(带有位置运算符)在 mongoose 中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:17 25 4
gpt4 key购买 nike

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

{
"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: Cannot call method 'path' of undefined]

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

如何在 Mongoose 中实现此功能?

最佳答案

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

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

关于node.js - Mongo 查询(带有位置运算符)在 mongoose 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28157681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com