当前位置: 首页 > 知识库问答 >
问题:

Mongo查找子文档数组中任何可能字段是否有值

周玺
2023-03-14

我正在对集合运行聚合并使用对另一个子集合的查找。

每个子级可能有也可能没有包含字符串的字段(foo)。

如果这些字段中至少有1个对任何子子文档具有字符串,我将项目一个布尔

这样我就可以

db.Parent.aggregate([
  {
    '$lookup': {
      'from': 'Children', 
      'localField': '_id', 
      'foreignField': 'parentId', 
      'as': 'CHILDREN'
    }
  }, {
     childHasFoo: {
         "$CHILDREN" : {$elemMatch: {foo: {$ne: ''}}}
     }
}
]

您可以看到我对childhasfoo的投影。我想我可以使用$ElemMatch$AnyElementTrue。请记住,foo也可能不存在于/所有子子文档上。因此需要考虑到这一点。

谢谢!

共有1个答案

沈成天
2023-03-14
  • 使用$MAP数组运算符迭代数组的循环,
  • 使用$ne检查条件,这将返回布尔值
  • $AnyElementTrue要检查的元素是否为true
  {
    $addFields: {
      childHasFoo: {
        $anyElementTrue: {
          $map: {
            input: "$CHILDREN",
            in: { $ne: ["$$this.foo", ""] }
          }
        }
      }
    }
  }

第二种选择是更精确的条件,

  • $trim删除字符串中的空白
  • $not$in要检查的字符串是否为空“”或null然后为false,否则为true
  {
    $addFields: {
      childHasFoo: {
        $anyElementTrue: {
          $map: {
            input: "$CHILDREN",
            in: {
              $not: {
                $in: [
                  { $trim: { input: "$$this.foo" } },
                  ["", null]
                ]
              }
            }
          }
        }
      }
    }
  }
 类似资料:
  • 我是新来的mongo。我有以下收藏。 文件: 请求: 文档集合中的typeId是文档类型的id,其中请求中的typeId是也可以为空的外部字段。如何获得以下输出。

  • 我在Firestore中收集了大量带有随机ID的文档,每个文档都有两个字段,一个名称和一个描述。我想让我的应用程序允许用户输入一系列字符,然后向他呈现所有包含字符序列的文档,比方说名称字段。使用Firebase及其查询是否可行,如果可行,您能给我一个Kotlin或Java的代码示例吗?我知道有一些方法,如或,但由于我还不知道用户正在查找哪个文档,如果没有弄错,我就不能使用它们。 例如,如果我有3个

  • 我正在尝试查找不包含至少一个具有特定字段值的文档的所有文档。例如,下面是一个示例集合: 我希望找到docs块中没有包含至少一个foo=1的记录的文档的每个记录。在上面的示例中,应该只返回第二个文档。 我还查看了$nin运算符,但示例只显示数组包含基元值列表时的情况,而不是附加文档。当我尝试使用类似于下面的东西来实现这一点时,它查找的是确切的文档,而不仅仅是我想要的foo字段。 有没有用基本运算符来

  • 我正在尝试从MongoDB中的数组中获取一个元素。我认为聚合过滤器是正确的应用程序。但是我已经尝试了一百万次,我仍然找不到问题所在。你能帮我吗? MongoDB示例数据: 我的解决方案: 我的结果: 预期结果: 我已经检查了Mongo参考:https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#example M

  • 任何人都可以帮助我查询mongo以释放数组,我使用的是mongdb本机驱动程序我的收集文档如下,也请忽略我的objectId它只是示例 而我的预期产出是 我只想解开我的数组,在一个查询中的爱好描述之间添加一个逗号,谢谢你的帮助

  • 问题内容: {用户名:’我’,公司:{“您的公司”:{…}} 我想在用户记录(用户集合)中插入公司,以便: {username:’me’,companies:{“ yourcompany”:{…},“ mycompany”:{…}} 但是这个名字是动态的。 为此。.{username:’me’,companies:{“ yourcompany”:{…},“ companyid”:{…}} 我该怎么