mongoDB:使用任何订单查找列表中的列表

时间:2015-01-26 15:46:19

标签: mongodb mongodb-query aggregation-framework

我正在mongoDB尝试使用以下条件执行查找请求: " if元素包含一个包含完全包含这些元素的列表"。 通过一个例子更有意义:

{
"categories" : [ 
        [ 
            "dogs", 
            "cats"
        ], 
        [ 
            "dogs", 
            "octopus"
        ]
    ]
}

我想找到一个只包含"狗"的类别的元素。和"章鱼"。

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

find({ 'categories' : ['octopus','dogs']})找不到我的问题,因为我不在乎列表中的订单

输出将是所有元素,其类别仅包含"狗"和"章鱼"

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

1 个答案:

答案 0 :(得分:2)

您可以使用aggregation pipelines

 db.collection.aggregate([
    { "$unwind": "$categories" }, 
    { "$match": { "categories" : { "$all" : [ "dogs", "octopus" ]}}}
])

这将为您提供以下文档

{ 
    "_id" : ObjectId("54c6685e7cdaa3f3e4dd8def"),
    "categories" : [ "dogs", "octopus" ] 
}