gpt4 book ai didi

node.js - 将键添加到带条件的嵌套数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:09:05 25 4
gpt4 key购买 nike

我在 mongodb 中有一个简单的数据结构:

{
_id: ObjectID,
name: 'Name',
birthday: '25.05.2001'
items: [
{
_id: ObjectID,
name: 'ItemName',
info: 'ItemInfo',
},
{
_id: ObjectID,
name: 'ItemName',
info: 'ItemInfo',
}
]
}

现在我想要一个查询,它以项目的 ObjectID (_id) 作为条件,并返回包含数组中所有项目的对象,并将值为 true 或 false 的新字段“选定”转换到以下字段中每个数组项的结果:

我用这个查询尝试过:

 { $unwind: '$items' },
{
$project: {
selected: {
$cond: { if: { 'items._id': itemObjectID }, then: true, else: false },
},
},
},

但是 MongoDB 给我返回一个错误:

MongoError: FieldPath field names may not contain '.'.

不知道为什么它不起作用,有什么帮助或想法吗?非常感谢!

最佳答案

您在这里缺少的是 $eq聚合运算符,用于检查相等条件。

如果您想检查ObjectId,则可以在此处尝试以下聚合,然后需要输入mongoose.Types.ObjectId(_id)

db.collection.aggregate([
{ "$unwind": "$items" },
{ "$addFields": {
"items.selected": {
"$eq": [
1111,
"$items._id"
]
}
}},
{ "$group": {
"_id": "$_id",
"name": { "$first": "$name" },
"items": {
"$push": {
"_id": "$items._id",
"selected": "$items.selected"
}
}
}}
])

将给出以下输出

[
{
"_id": ObjectId("5a934e000102030405000000"),
"items": [
{
"_id": 1111,
"selected": true
},
{
"_id": 2222,
"selected": false
}
],
"name": "Name"
}
]

您可以查看here

关于node.js - 将键添加到带条件的嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50802924/

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