首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB -查找任何具有数组组合的文档

MongoDB -查找任何具有数组组合的文档
EN

Stack Overflow用户
提问于 2018-12-20 16:46:27
回答 1查看 55关注 0票数 0

蒙古文件如下:

代码语言:javascript
复制
{
    _id: '',
    names: ['ab', 'bc']
}
{
    _id: '',
    names: ['ab', 'de', 'fg']
}
{
    _id: '',
    names: ['bc']
}
{
    _id: '',
    names: ['ab', 'bc', 'cd']
}

我有一个输入数组:

代码语言:javascript
复制
['ab', 'bc', 'cd']

问题:如何获取所有文档,其中的“名称”等于输入数组的任何组合?

结果:以下任何“名称”的所有文档都应该返回

代码语言:javascript
复制
['ab']
['bc']
['cd']
['ab', 'bc']
['bc', 'ab']
['bc', 'cd']
['cd', 'bc']
... and so on..
['ab', 'bc', 'cd']
EN

回答 1

Stack Overflow用户

发布于 2018-12-20 18:23:56

您可以在find中使用find获取带有名称数组的$size of $setIntersection

代码语言:javascript
复制
db.tt.find({$expr : {$gt : [{$size : {$setIntersection : ["$names", ["ab","bc","cd"]]}}, 0]}})

样本收集

代码语言:javascript
复制
> db.tt.find()
{ "_id" : "1", "names" : [ "ab", "bc" ] }
{ "_id" : "2", "names" : [ "ab", "de", "fg" ] }
{ "_id" : "3", "names" : [ "bc" ] }
{ "_id" : "4", "names" : [ "ab", "bc", "cd" ] }

使用$expr$setIntersection

代码语言:javascript
复制
> db.tt.find({$expr : {$gt : [{$size : {$setIntersection : ["$names", ["ab","bc","cd"]]}}, 0]}})
{ "_id" : "1", "names" : [ "ab", "bc" ] }
{ "_id" : "2", "names" : [ "ab", "de", "fg" ] }
{ "_id" : "3", "names" : [ "bc" ] }
{ "_id" : "4", "names" : [ "ab", "bc", "cd" ] }

$in (如安东尼的评论中所示)

代码语言:javascript
复制
> db.tt.find({names : {$in : ["ab","bc","cd"]}})
{ "_id" : "1", "names" : [ "ab", "bc" ] }
{ "_id" : "2", "names" : [ "ab", "de", "fg" ] }
{ "_id" : "3", "names" : [ "bc" ] }
{ "_id" : "4", "names" : [ "ab", "bc", "cd" ] }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53872839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档