在mongodb

时间:2017-11-23 03:47:39

标签: arrays node.js mongodb

我有一个名为'test'的集合,因为有一个类似的文档:

{
"_id" : 1
"letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "E", "B", "F" ]
    ]
}

如果我这样搜索:

db.getCollection('test').find({"_id" : 1}, {"letters": ["A", "B"] })

然后它将获取记录。

{
"_id" : 1
"letters" : [ 
        [ "A", "B" ], 
        [ "C", "D" ], 
        [ "A", "E", "B", "F" ]
    ]
}

如果我这样搜索:

db.getCollection('test').find({"_id" : 1}, {"letters": ["B", "A"] })

它无法获取记录

我的要求是如果我也这样给([“B”,“A”]),它必须获取文件。因为数组中已存在相同的字母。

我将尝试使用$ all运算符,但它不起作用

db.getCollection('test').find({"_id" : 1}, {"letters": {$all: ["B", "A"]} })

现在它也不会获取记录

任何人都可以请求解决方案。

2 个答案:

答案 0 :(得分:0)

您可以这样做:

 db.test.find(
       {
        "$and":[
         {"_id" : ObjectId("5a16674b4828c9f51d3b3a18")},
         {"$or":[{"letters": ["A", "B"] },{"letters": ["B", "A"] }]}
               ]
       }
      )

现在它将搜索具有["A","B"] OR ["B","A"]

的文档

答案 1 :(得分:0)

    db.getCollection('test').find(
        {
            "_id" : 1,
            'letters':{
                $elemMatch:{
                    $elemMatch:{
                        $in:['B','A']
                    }
                }
            }
        }
    )

此查询将查找所有包含您在最后$中关闭的数组元素的文档, 例, 如果您只指定$ in:['C']或$ in:['B','A']

,它会找到相同的文件