Estou tentando obter um conjunto de documentos de minha coleção com as seguintes condições:
Em seguida, agrupe esses documentos (únicos / distintos) por um campo. Quando executo a consulta no MongoDB, parece que ela retorna os valores corretos:
db.getCollection('products').aggregate([
{ $match: { images: { $exists: true, $ne: null } } },
{ $match: { img_status: { $exists: false } } },
{ $group : { _id:"$vendor_link", "uuid" : {$first: "$uuid"}, "images": { $first: "$images"} } }
])
Mas no PyMongo, sempre recebo o oposto, como img_status exist = true
:
pipeline = [
{
"$match":
{
"images" :
{ "$ne" : "null", "$exists": "true", }
}
},
{
"$match":
{
"img_status":
{"$exists": "false"}
}
},
{
"$group":
{
"_id" : "$vendor_link",
"images" : {"$first": "$images"},
"uuid" : {"$first": "$uuid"},
"source" : {"$first": "$source"}
}},
]
pprint(list(self.collection.aggregate(pipeline)))
O que estou fazendo errado?
Isso deve resolver o problema. Você está passando valores de string em vez de None
valores booleanos True
eFalse
pipeline = [
{
"$match": {
"images" : {
"$ne" : None,
"$exists": True,
}
}
},
{
"$match": {
"img_status": {
"$exists": False,
}
}
},
{
"$group":{
"_id" : "$vendor_link",
"images" : {"$first": "$images"},
"uuid" : {"$first": "$uuid"},
"source" : {"$first": "$source"}
}
},
]
pprint(list(self.collection.aggregate(pipeline)))
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras