0

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.

1
  • in your example info.birthnotes does not contain "Lisbon" Commented Oct 27, 2016 at 9:43

2 Answers 2

1

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})
Sign up to request clarification or add additional context in comments.

Comments

0

The way to find is by using a regular expression

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.