我有一个集合,其中的文档如下所示:
{
"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"]}})
但它什么也没有返回。
答案 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.*/})