'How to read a specific key-value pair from mongodb collection

If I have a mongodb collection users like this:

{
  "_id": 1,
  "name": {
    "first" : "John",
    "last" :"Backus"
  },
}

How do I retrieve name.first from this without providing _id or any other reference. Also, is it possible that pulling just the `name^ can give me the array of embedded keys (first and last in this case)? How can that be done?

db.users.find({"name.first"}) didn't work for me, I got a:

SyntaxError "missing: after property id (shell):1



Solution 1:[1]

The first argument to find() is the query criteria whereas the second argument to the find() method is a projection, and it takes the form of a document with a list of fields for inclusion or exclusion from the result set. You can either specify the fields to include (e.g. { field: 1 }) or specify the fields to exclude (e.g. { field: 0 }). The _id field is implicitly included, unless explicitly excluded.

In your case, db.users.find({name.first}) will give an error as it is expected to be a search criteria.

To get the name json : db.users.find({},{name:1})

If you want to fetch only name.first

db.users.find({},{"name.first":1})

Mongodb Documentation link here

Solution 2:[2]

To fetch all the record details: db.users.find({"name.first":""}) To fetch just the name or specific field: db.users.find({{},"name.X":""}); where X can be first, last .

dot(.) notation can be used if required to traverse inside the array for key value pair as db.users.find({"name.first._id":"xyz"});

Solution 3:[3]

In 2022

const cursor = db
  .collection('inventory')
  .find({
    status: 'A'
  })
  .project({ item: 1, status: 1 });

Source: https://www.mongodb.com/docs/manual/tutorial/project-fields-from-query-results/

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Rajat Sharda
Solution 3 Yannick Lescure