我如何通过Mongodb查询数组类型

时间:2015-10-12 06:40:39

标签: node.js mongodb

我有一个带属性的文档是一个数组:

{
  name: ['Clark', 'Memphe', 'Alberto', 'Traicl']
}

我想用keyword ='cl'查询,我的目的是返回

['Clark', 'Traicl']

我如何用这个条件查询?

2 个答案:

答案 0 :(得分:2)

尝试此查询

db.collection.find({"name": /.*cl.*/})

答案 1 :(得分:1)

您可以采用的一种方法是使用聚合框架。聚合管道将具有初始步骤 $match ,其使用与正则表达式模式匹配的名称数组来过滤文档。在管道的下游,您需要一个 $unwind 运算符,它实际上将一个文档转换为多个。需要另一个 $match 管道阶段来过滤那些解构的数组文档,然后是最后的 $group 步骤来通过 $push 累加器运算符。所以下面的管道操作:

var re = new RegExp(/.*cl.*/i)
db.collection.aggregate([
    {
        "$match": { "name":  re }
    },
    {
        "$unwind": "$name"
    },
    {
        "$match": { "name": re }
    },
    {
        "$group": {
            "_id": null,
            "name": {
                "$push": "$name"
            }
        }
    }
])

将给出结果:

{ "_id" : null, "name" : [ "Clark", "Traicl" ] }