gpt4 book ai didi

arrays - MongoError : Found multiple array filters with the same top-level field name

转载 作者:行者123 更新时间:2023-12-04 14:40:31 27 4
gpt4 key购买 nike

伙计们。我正在 Node.js 中使用 MongoDB 集合,该集合具有一个对象数组的字段,如下所示:

{_id: 'someIdNumber',
text: 'some text',
replies: [{_id: 'someReplyId', replyText: 'some reply text', password: 'somePassword'}, {...}]

我正在尝试更新 replyText领域 replies使用 $[<identifier>] 的数组MongoDB 文档中所示的数组更新运算符: https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/我想要做的是如下:
db.collection('collectionName').updateOne(
{ _id: ObjectID('whateverId') },
{ $set: { "replies.$[elem].replyText": "new text" } },
{
arrayFilters: [{ "elem._id": ObjectID(req.body.reply_id)}, {"elem.password": 'whateverPassword}]
},
(err, data) => {console.log('hooray, it worked')}

这会引发错误, MongoError: Found multiple array filters with the same top-level field name elem .如果我摆脱了我的一个 arrayFilters ,这修复了错误,但显然以我的过滤条件为代价。

MongoDB 文档的此过程示例(我已将集合 students2 缩短为单个文档)如下:
{
"_id" : 1,
"grades" : [
{ "grade" : 80, "mean" : 75, "std" : 6 },
{ "grade" : 85, "mean" : 100, "std" : 4 },
{ "grade" : 85, "mean" : 100, "std" : 6 }
]
}


db.students2.update(
{ },
{ $inc: { "grades.$[elem].std" : -1 } },
{ arrayFilters: [ { "elem.grade": { $gte: 80 }, "elem.std": { $gt: 5 } } ], multi: true }
)

语法略有不同,因为文档使用的是 Mongo shell 方法,而不是 Node.js,但除此之外,在我看来,我正在按照文档所说的去做。我正在使用 updateOne而不是 update因为我只想更新一个文档,而且我没有使用 multi出于同样的原因。
关于我如何让它与两者一起使用的任何见解 arrayFilters完好无损将不胜感激。
谢谢你的时间!

最佳答案

知道了!不幸的是,我无法对问题/评论进行投票,因此在此处添加以供其他人受益。感谢 @LuosRestil 和 @typesafe 帮我解决这个问题。我在尝试为 arrayFilters 的数组中的同一字段添加多个表达式时遇到了相同的语法错误。每个字段应该是一次表达式。

错误的:

arrayFilters: [
{ "elemA.<fieldName1>": "value1" },
{ "elemA.<fieldName2>": "value2" },
{ "elemA.<fieldName3>": "value3" }
];

正确的:
arrayFilters: [
{
"elemA.<fieldName1>": "value1",
"elemA.<fieldName2>": "value2",
"elemA.<fieldName3>": "value3"
}
];

关于arrays - MongoError : Found multiple array filters with the same top-level field name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59013833/

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