gpt4 book ai didi

mongodb - 如何检查数组字段是否是 MongoDB 中另一个数组的一部分?

转载 作者:行者123 更新时间:2023-12-04 00:08:58 24 4
gpt4 key购买 nike

在此 question , Jeff the Bear 解释了如何用数组搜索文档

contains 'tag1'
contains ['tag1','tag2'],
contains any of ['tag3', 'tag4']

但是,如果我想使用属于另一个数组的数组搜索文档,我该怎么办?
post1.tags = ['tag1']
post2.tags = ['tag1','tag3']
post3.tags = ['tag2','tag4']
post4.tags = ['tag1','tag2','tag3','tag4']

我想得到 post1 和 post3 因为它们有标签
contained in ['tag1', 'tag2', 'tag4']

我不想得到 post2 和 post4,因为 tag3 不存在于 ['tag1', 'tag2', 'tag4']
换句话说,选择帖子标签数组中的所有元素都可以在另一个条件数组中找到

最佳答案

您可以使用聚合框架来执行此操作。鉴于以下数据

> db.post.find()
{ "_id" : 1, "tags" : [ "tag1" ] }
{ "_id" : 2, "tags" : [ "tag1", "tag3" ] }
{ "_id" : 3, "tags" : [ "tag2", "tag4" ] }
{ "_id" : 4, "tags" : [ "tag1", "tag2", "tag3", "tag4" ] }

聚合查询
db.post.aggregate({
$project: {
_id: 1,
tags: 1,
killFlag: {
$const: [true, false]
}
}
}, {
$unwind: "$tags"
}, {
$unwind: "$killFlag"
}, {
$match: {
$nor: [{
tags: {
$in: ['tag1', 'tag2', 'tag4']
},
killFlag: true
}
]
}
}, {
$group: {
_id: "$_id",
tags: {
$addToSet: "$tags"
},
killFlag: {
$max: "$killFlag"
}
}
}, {
$match: {
killFlag: false
}
}, {
$project: {
_id: 1,
tags: 1
}
})

会给你
{
"result": [{
"_id": 3,
"tags": [
"tag4",
"tag2"
]
}, {
"_id": 1,
"tags": [
"tag1"
]
}
],
"ok": 1
}

关于mongodb - 如何检查数组字段是否是 MongoDB 中另一个数组的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15635658/

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