Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
239 views
in Technique[技术] by (71.8m points)

arrays - Finding records whose object contains a String value

I have a collection, the document in it looks like this:

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

I want to find the people who were born in Lisbon. The question is how do I know if a record's field "info.birthnotes" contains "Lisbon"?

I tried this command:

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

but it returns nothing.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

From inspection, the "info.birthnotes" array may look like it has comma separated elements

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

yet it has a single string value "Los Angeles, California, USA" which is comma separated:

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

You are currently querying it as if it is multi-valued with single sttring values as elements. You need to use a $regex based query to return the documents whose "info.birthnotes" array string contains "Lisbon" as follows:

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

or if you are using a variable with the RegExp constructor to create a regular expression object you can use in your query:

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...