0

Hi I have the following database em mongodb and I need a query to get a single object of the array, like the object card with the number 18, all the queries I did returned the entire array and not only the object I want, how I can do it?

{"Cards":
              [
                        {"Card":{"_id":{"$oid":"5a46626e150ed3f847f01bac"},"Number":1,"Pag":1}},
                        {"Card":{"_id":{"$oid":"5a466d96150ed3f847f01bad"},"Number":18,"Pag":6}},
                        {"Card":{"_id":{"$oid":"5a466de6150ed3f847f01bae"},"Number":35,"Pag":8}}
              ]
        }
Paulo
  • 71
  • 1
  • 7
  • Do you have any examples of queries that you've tried? – user15741 Jan 03 '18 at 20:20
  • I tryied `db.teste.find({"Cards.Card.Number":18}).pretty()` and it returned the entire array – Paulo Jan 03 '18 at 20:31
  • also tryed `db.teste.find({"Cards.Card.Number":18},{_id:0, "Cards.Card":{$elemMatch:{Number:18}}}).pretty()` but it gave me `Error: error: { "ok" : 0, "errmsg" : "Cannot use $elemMatch projection on a nested field.", "code" : 2, "codeName" : "BadValue" }` – Paulo Jan 03 '18 at 20:35
  • Finnaly I tryed `db.teste.aggregate( {$match:{ "Cards.Card.Number":18 }}, {$unwind:"$Cards.Card"}, {$match:{ "Cards.Card.Number":18 }} )` like the answers in the post that @Veeram suggested but it didn't returned anything – Paulo Jan 03 '18 at 20:39
  • Try `db.teste.find({"Cards.Card.Number":18},{_id:0, "Cards":{$elemMatch:{"Card.Number":18}}}).pretty()` for first version. For second version try `db.teste.aggregate( {$match:{ "Cards.Card.Number":18 }}, {$unwind:"$Cards"}, {$match:{ "Cards.Card.Number":18 }} )` – s7vr Jan 03 '18 at 20:45
  • It worked, I still have a lot to learn, thanks for your patience! – Paulo Jan 03 '18 at 20:48
  • well, the second version still gives me an empty result, but at least the first works well – Paulo Jan 03 '18 at 20:50
  • I changed my database like this: `{"Some": {"Cards": [ {"Card":{"_id":{"$oid":"5a46626e150ed3f847f01bac"},"Number":1,"Pag":1}}, {"Card":{"_id":{"$oid":"5a466d96150ed3f847f01bad"},"Number":18,"Pag":6}}, {"Card":{"_id":{"$oid":"5a466de6150ed3f847f01bae"},"Number":35,"Pag":8}} ] } }`, just added the "some" in the begin, so I tryed to do: `db.teste.find({"Some.Cards.Card.Number":18},{_id:0, "Cards":{$elemMatch:{"Some.Card.Number":18}}}).pretty()`, but it gives me `[ ]`. It should work – Paulo Jan 03 '18 at 21:07
  • I tryied `db.teste.find({"Some.Cards.Card.Number":18},{_id:0, "Some.Cards":{$elemMatch:{"Some.Card.Number":18}}}).pretty()` but it gives me `Error: error: { "ok" : 0, "errmsg" : "Cannot use $elemMatch projection on a nested field.", "code" : 2, "codeName" : "BadValue" }` – Paulo Jan 03 '18 at 21:12
  • Anyone knows how to do? – Paulo Jan 03 '18 at 22:11
  • Try this... `db.teste.find({"Some.Cards.Card.Number":18},{_id:0, "Some.Cards":{$elemMatch:{"Card.Number":18}}}).pretty()` – Kapil Barad Jan 04 '18 at 03:44

0 Answers0