用于获取没有空白("")或null值的数据的聚合查询无法正常工作

时间:2016-10-10 11:47:37

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

我有这个聚合查询来获取我的集合中没有空白("")值或空值的数据。这是我的疑问:

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"
}

有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

使用localField作为您从中调用$ lookup的集合中的字段。在这种情况下,该字段为'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"}}

]);