gpt4 book ai didi

node.js - MongoDB 从 $filter 返回一个对象

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

消费者字段是包含两个对象的数组。使用 $filter ,一个对象被删除,但我需要消费者最后成为对象,但现在它是带有一个对象的数组。我尝试了 $arrayToObject 但无法开始工作。如何将consumer返回为对象?

   {
$project: {
messages: 1,
authors: { $concatArrays: ["$userName", "$storeName"] },
consumer: {
$filter: {
input: { $concatArrays: ["$userName", "$storeName"] },
as: "authors",
cond: { $ne: ["$$authors._id", req.user._id] }
}
},
}
}

最佳答案

试试这个:

{
$project: {
messages: 1,
authors: { $concatArrays: ["$userName", "$storeName"] },
consumer: {
$arrayElemAt: [{
$filter: {
input: { $concatArrays: ["$userName", "$storeName"] },
as: "authors",
cond: { $ne: ["$$authors._id", req.user._id] }
}
}, 0]
}
}
}

您可以使用$arrayElemAt直接在 $filter 之后,而不是附加阶段 $unwind$filter 通常会返回匹配对象的数组或 [] 如果没有匹配,所以如果你使用 $unwind 你需要使用它 { $unwind: { path: "$consumer",preserveNullAndEmptyArrays: true } } 否则,最终聚合响应中可能会丢失文档(其中 consumer[]),请在此处阅读更多相关信息::$unwind 。所以我更喜欢 $arrayElemAt 而不是 $unwind

关于node.js - MongoDB 从 $filter 返回一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59737371/

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