【问题标题】:Aggregate query to fetch data which does not have blank("") or null value is not working properly聚合查询以获取没有空白(“”)或空值的数据无法正常工作
【发布时间】:2016-10-10 11:47:36
【问题描述】:

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

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

谁能知道这个?

【问题讨论】:

  • {$match: {"myData.0": {$exists: true}}} 怎么样?
  • MyCollectionA 中没有键为 myField 的字段,如 $lookup 运算符的 "localField" : "myField" 选项中所指定。也许您的意思是"localField" : "MyCollectionAId"?另外,您能否显示使用上述聚合的预期输出?
  • @chridam "myField" 来自 MyCollectionB。
  • 如果它来自MyCollectionB,为什么在$lookup 运算符参数中将它指定为MyCollectionAlocalField
  • @chridam 因为我想找到“myField”不应该有银行或空数据的数据。

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


【解决方案1】:

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

]);

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2021-10-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多