首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在多个字段中搜索精确的数组值

在多个字段中搜索精确的数组值
EN

Stack Overflow用户
提问于 2015-06-03 08:11:47
回答 1查看 123关注 0票数 2

我有一套藏书,里面有如下3份文件:

代码语言:javascript
复制
Collection:
{
    name: "A",
    arr: [1, 2, 3],
    arr1: [4, 5, 6]
},
{
    name: "B",
    arr: [3, 7, 11],
    arr1: [5, 6, 9]
},
{
    name: "C",
    arr: [3, 4, 5],
    arr1: [7, 9, 12]
}

我想在集合下面搜索数组。

但是,所有数组值都必须在字段"arr“或"arr1”中匹配。

我的意思是数组值可以出现在两个字段中,但是所有值都必须在文档中。

因此,当我在集合中搜索数组时,只有第二个数组有名称:“B”,第三个数组有名称:“C”文档应该是结果。

因为在第二个文档中;"arr“字段中的第一个数组值(3),"arr1”字段中的第二个和第三个数组值(5和9)。在第三个文档中,"arr“字段中的第一和第二(3,5)数组值和"arr1”字段中的第三数组值(9)。

代码语言:javascript
复制
Array : [3, 5, 9]

你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-03 08:45:33

最好的方法是使用$redact操作符。

代码语言:javascript
复制
db.collection.aggregate([
    { "$redact": {
        "$cond": [
            { "$setIsSubset": [ [3,5,9], { "$setUnion": [ "$arr", "$arr1" ] } ] }, 
            "$$KEEP", 
            "$$PRUNE" 
         ]}
    }
])

您还可以将$project$setUnion运算符和$match一起使用。

代码语言:javascript
复制
db.collection.aggregate([
    { "$project": { "name": 1, "arr": 1, "arr1": 1, "allvalues": { "$setUnion": [ "$arr", "$arr1" ]}}}, 
    { "$match": { "allvalues": { "$all": [3, 5, 9] }}}
])

输出:

代码语言:javascript
复制
{ "_id" : ObjectId("55d48fd2939d0f7d372d6dbe"), "name" : "B", "arr" : [ 3, 7, 11 ], "arr1" : [ 5, 6, 9 ] }
{ "_id" : ObjectId("55d48fd2939d0f7d372d6dbf"), "name" : "C", "arr" : [ 3, 4, 5 ], "arr1" : [ 7, 9, 12 ] }
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30614385

复制
相关文章

相似问题

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