mongoDB:以任意顺序在列表中查找列表

mongoDB:以任意顺序在列表中查找列表,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我正在尝试在mongoDB中执行查找请求,条件是: “if元素包含的列表正好包含这些元素”。 举个例子更能说明问题: { "categories" : [ [ "dogs", "cats" ], [ "dogs", "octopus" ] ] } 我想找到一个元素,它的类别只包含“dogs”和“octopus” fi

我正在尝试在
mongoDB
中执行查找请求,条件是: “if元素包含的列表正好包含这些元素”。 举个例子更能说明问题:

{
"categories" : [ 
        [ 
            "dogs", 
            "cats"
        ], 
        [ 
            "dogs", 
            "octopus"
        ]
    ]
}
我想找到一个元素,它的类别只包含“dogs”和“octopus”

find({'categories':['dogs','octopus']})
查找元素

find({'categories':['octopus','dogs']})
找不到,这就是我的问题所在,因为我不关心列表中的顺序

输出将是一个类别中仅包含“狗”和“章鱼”的所有元素

我不确定是否可能,但如果不是,我看到的两种解决方案是按字母顺序存储它们(很好,但如果我以后需要顺序怎么办?)或存储/搜索所有可能的顺序(非常难看)

您可以使用

db.collection.aggregate([
{“$unwind”:“$categories”},
{“$match”:{“categories”:{“$all”:[“dogs”,“octopus”]}}
])
这将为您提供以下文档

{
“_id”:ObjectId(“54c6685e7cdaa3f3e4dd8def”),
“类别”:[“狗”、“章鱼”]
}

需要注意的是,MongoDB不关心数据值是数组还是单个值,当查询运行时,它会检查键,如果是字符串,它会尝试匹配,如果是数组,它会在数组值中搜索匹配项。您的查询的预期结果是什么?您是否需要
categories
字段中的所有其他子数组?结果将是一个类别中的所有元素仅包含“dogs”和“octopus”。@Bajo请检查我的答案是否为您提供了预期的输出。如果不满意,请留下评论。此外,您还可以编辑您的文章,添加预期的输出完美,非常感谢!