查找其对象包含String值的记录

时间:2016-10-27 09:00:20

标签: arrays mongodb find mongodb-query

我有一个集合,其中的文档如下所示:

{ 
    "person-name" : "Hughart, Ron", 
    "info" : { 
        "birthnotes" : [ "Los Angeles, California, USA" ], 
        "birthdate" : [ "18 June 1961" ], 
        "birthname" : [ "Hughart, Ronald P" ] 
    } 
}

我想找到在里斯本出生的人。问题是如何知道记录的字段"info.birthnotes"是否包含"Lisbon"

我试过这个命令:

db.collection.find({"info.birthnotes": {"$in": ["Lisbon"]}})

但它什么也没有返回。

2 个答案:

答案 0 :(得分:1)

从检查开始,"info.birthnotes"数组可能看起来像是以逗号分隔的元素

"info.birthnotes" : [ "Los Angeles", "California", "USA" ]

但它有一个逗号分隔的字符串值"Los Angeles, California, USA"

"info.birthnotes" : [ "Los Angeles, California, USA" ]

您当前正在查询它,好像它是多值的,单个sttring值作为元素。您需要使用基于 $regex 的查询来返回"info.birthnotes"数组字符串包含"Lisbon"的文档,如下所示:

db.collection.find({ "info.birthnotes": { "$regex": /Lisbon/i } })

或者如果您使用带有 RegExp 构造函数的变量来创建可在查询中使用的正则表达式对象:

var query = "Lisbon";
var rgx = new RegExp(query, "i");
db.collection.find({"info.birthnotes": rgx})

答案 1 :(得分:0)

查找方法是使用正则表达式

db.collection.find({"info.birthnotes": /.*Lisbon.*/})