我有这个聚合查询来获取我的集合中没有空白("")值或空值的数据。这是我的疑问:
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"
}
有人可以对此有所了解吗?
答案 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"}}
]);