I want to $project
if a field exists, but not it's value, using mongoose
model
aggregate
query.
If it was possible using $exists
in $cond
, it would have looked something like this:
$project: {
b: {
$cond: {
if : {$exists: ['$b', true]},
then : true,
else : false
}
}
}
But, I have to use a boolean
expression in the $cond
operator.
In the MongoDB shell, I can do something similar with:
{$eq: ['$b', undefined]}
and it yields the expected results, but with mongoose
model aggregate
for some reason, it always results with true
.
for example, if I have the following documents:
{
"a" : 1,
"b" : 2
},
{
"a" : 1
}
I need the following results:
{
"b": true
},
{
"b": false
}
How can I do something like that with mongoose
?
MongoDB $count AggregationThe MongoDB $count operator allows us to pass a document to the next phase of the aggregation pipeline that contains a count of the documents. There a couple of important things to note about this syntax: First, we invoke the $count operator and then specify the string.
You can use $and with aggregation but you don't have to write it, and is implicit using different filters, in fact you can pipe those filters in case one of them needs a different solution.
With aggregate + $match, you get a big monolithic BSON containing all matching documents. With find, you get a cursor to all matching documents. Then you can get each document one by one.
The pipeline provides efficient data aggregation using native operations within MongoDB, and is the preferred method for data aggregation in MongoDB. The aggregation pipeline can operate on a sharded collection. The aggregation pipeline can use indexes to improve its performance during some of its stages.
$exists
not supported in aggregate
query of MongoDB. So in aggregate
query instead of $exists
can use $ifNull
.
syntax:
{ $ifNull: [ <expression>, <replacement-expression-if-null> ] }
for more
Updated:
to get b
value as true
or false
can try this query
db.test.aggregate([
{
$project: {
b: {
$cond: [
{$ifNull: ['$b', false]}, // if
true, // then
false // else
]
}
}
}
])
Explanation:
b = $cond: [ 'if condition satisfied', 'then true', 'else false' ];
where condition = {$ifNull: ['$b', false]}
Here if $b
not exist then condition = false
otherwise condition = true
.
so if condition = true
then return then result that means b = true
if condition = false
then return else result means b = false
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With