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
不应具有银行或空数据。