gpt4 book ai didi

MongoDB - $filter 2 数组包含对象

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

假设我有一个像下面这样的文档

{
fieldA : [
{
_id : 1,
value : 1,
},
{
_id : 2
value : 2,
},
{
_id : 3,
value : 3,
},
],
fieldB : [
{
_id : 2
},
{
_id : 3
},
{
_id : 4
},
],

}

我想过滤 fieldB 中的 _idfieldA 中有哪些 valuefieldA ,添加到新字段名fieldC

预期输出

  fieldC : [
{
_id : 2,
value : 2,
},
{
_id : 3,
value : 3,
},
]

我尝试在 $addFields 中使用 $filter 但它返回了一个空数组

{
$addFields : {
fieldC : {
$filter : {
input : "$fieldB",
cond : {
$in : ["$$this._id", "$fieldA._id"]
}
}
}
}
}
fieldC = []

最佳答案

据我了解,您的预期行为实际上是一组交集行为。您可以简单地“交换”您的 $filter 以在 b._id 中执行 a._id

db.collection.aggregate([
{
"$addFields": {
"fieldC": {
"$filter": {
"input": "$fieldA",
"as": "a",
"cond": {
"$in": [
"$$a._id",
"$fieldB._id"
]
}
}
}
}
}
])

这是 Mongo playground供大家引用。

关于MongoDB - $filter 2 数组包含对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72455088/

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