Mongodb 用于获取不具有空(";)或空值的数据的聚合查询工作不正常
我使用此聚合查询来获取集合中没有空(“”)值或空值的数据。我的问题是:Mongodb 用于获取不具有空(";)或空值的数据的聚合查询工作不正常,mongodb,mongodb-query,aggregation-framework,mongodb-aggregation,Mongodb,Mongodb Query,Aggregation Framework,Mongodb Aggregation,我使用此聚合查询来获取集合中没有空(“”)值或空值的数据。我的问题是: MyCollectionA.aggregate([ {$lookup: { "from" : "MyCollectionB","localField" : "MyCollectionAId", "foreignField" : "_id", "as" : "myData"}}, {$match: {"myData": {$nin: [null, "", " "]}}}, {$group: {'_id'
MyCollectionA.aggregate([
{$lookup: { "from" : "MyCollectionB","localField" : "MyCollectionAId", "foreignField" : "_id", "as" : "myData"}},
{$match: {"myData": {$nin: [null, "", " "]}}},
{$group: {'_id': '$MyCollectionAId'}}]);
这个更新的查询解决了我的问题
MyCollectionA数据:
{
"_id" : "AbqMZXWt4kwFbJM8Y",
"MyCollectionBId" : "DEW7QiEA5wbaFkKkJ",
"MyCollectionAName" : "asdfasdf"
}
{
"_id" : "Ac2CJbz6o4xKQETAZ",
"MyCollectionBId" : "5JjzxkxfBsNXsWcrz",
"MyCollectionAName" : "asdfasdfads."
}
{
"_id" : "AcE2WDqbRG9dv3Lsc",
"MyCollectionBId" : "5678179e20a3d410709ba7f4",
"MyCollectionAName" : "asfasfdasdf"
}
{
"_id" : "AcXsSNc6jmmDyEF54",
"MyCollectionBId" : "2Cy9TpzeqwkTibLy9",
"MyCollectionAName" : "asdfasdfadsr"
}
MyCollectionB数据:
{
"_id" : "5JjzxkxfBsNXsWcrz",
"myField" : " "
}
{
"_id" : "5678179e20a3d410709ba7f4",
"myField" : null
}
{
"_id" : "2Cy9TpzeqwkTibLy9",
"myField" : "asdf"
}
但是这个查询给我的输出数据是空值和空值
预期结果将是:
{
"_id" : "2Cy9TpzeqwkTibLy9",
"MyCollectionBId" : "5JjzxkxfBsNXsWcrz",
"myField" : "asdf"
}
有人知道这一点吗?在调用$lookup的集合中使用localField作为字段。在本例中,字段为“myCollectionBId” 此外,在查找阶段之后,来自外部集合的匹配文档将作为数组附加到$lookup阶段的“as”字段中提到的字段。因此,您不能直接查询“myData”。您必须在“myData.0.myField”上使用“$match”运算符
db.MyCollectionA.aggregate([
{$lookup: { "from" : "MyCollectionB", "localField" : "MyCollectionBId", "foreignField" : "_id", "as" : "myData"}},
{$match : { "myData":{$exists:true}, "myData.0.myField": {$nin: [null, "", " "]}}},
{$project: { "MyCollectionBId":1, "myField":"myData.0.myField"}}
]);
{$match:{“myData.0”:{$exists:true}}}
怎么样?在MyCollectionA
中没有任何字段具有$lookup
操作符的“localField”:“myField”
选项中指定的键myField
。也许您的意思是“localField”:“MyCollectionAId”?另外,您是否可以显示使用上述聚合的预期输出?@chridam“myField”来自MyCollectionB。如果它来自MyCollectionB
,那么为什么在$lookup
操作符参数中指定它为MyCollectionA
的localField
不应具有银行或空数据。