我有一个带属性的文档是一个数组:
{
name: ['Clark', 'Memphe', 'Alberto', 'Traicl']
}
我想用keyword ='cl'查询,我的目的是返回
['Clark', 'Traicl']
我如何用这个条件查询?
答案 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" ] }