Reputation: 222657
I have a collection which contains some documents as follows,
{
"transactionId": 3432423,
"reviews": [
{
"fromUser": {
"userId": "5236aa1acd6e"
},
"toUser": {
"userId": "0ec8db9544cc"
},
"rating": 4.3,
"comment": ""
},
{
"toUser": {
"userId": "5236aa1acd6e",
"email": "[email protected]",
"firstName": "your",
"lastName": "life"
},
"fromUser": {
"userId": "0ec8db9544cc",
"email": "[email protected]",
"firstName": "my",
"lastName": "life"
},
"rating": 4.3,
"comment": ""
}
]
}
i need to check if subdocument reviews present inside the document. i have used this query,
db.getCollection('_testCollection').find({ "$elemMatch": { "reviews": { "$exists": false } }})
it throws an error saying,
"errmsg" : "unknown top level operator: $elemMatch",
Upvotes: 2
Views: 9659
Reputation: 312179
Neither $elemMatch
or $exists
is what you want to use to determine if reviews
is an empty array.
Instead, either compare against []
:
db.test.find({reviews: []})
Or use the $size
operator:
db.test.find({reviews: {$size: 0}})
Upvotes: 4
Reputation: 901
From the Docs :-
The $elemMatch operator matches documents that contain an array field with at least one element that matches all the specified query criteria.
db.getCollection('_testCollection').find({ "reviews": {"$elemMatch" : { "$exists": false } }})
$exists :- true or false // depend on requirement
Thanks
Upvotes: 0