I have a people collection in mongodb like below.
MongoDB version:4.0.13
{
"_id" : ObjectId("5dcbeb97e184e0f527c6a3e7"),
"name" : "nithin",
"age" : 35.0,
"addresses" : [
{
"street" : "xyz",
"city" : "Tvm"
},
{
"street" : "pqr",
"city" : "KLM"
},
{
"street" : "abc"
}
]
}
{
"_id" : ObjectId("5dcbebe4e184e0f527c6a3e8"),
"name" : "akash",
"age" : 21.0,
"addresses" : [
{
"street" : "lon",
"city" : "London"
},
{
"street" : "par",
"city" : "paris"
},
{
"street" : "abc"
}
]
}
I need to filter out all the addresses which doesn't have city property. What i achieved so far is this
db.getCollection('People').aggregate([
{
$project:
{
"name":1,
"age":1,
"addresses":
{
$filter:
{
input:"$addresses",
as:"address",
cond:{$not:["$$address.city"]}
}
}
}
}
])
Result: I am getting all addresses without city property(this is exactly the opposite of what i need). I couldn't find any help from SO. how to negate a not result
I also tried this
$filter:
{
input:"$addresses",
as:"address",
cond:{"$exists":["$$address.city":true]}
}
Result:
Error: Line 14: Unexpected token :
$filter's condition.