Mongo查询键值不是特定值的嵌入式文档

非角

我有一个看起来像这样的mongo(3.6)集合(ISODates设置为不同的时间,此处的实际时间并不重要):

{_id: 0}
{_id: 1, a: null}
{_id: 2, a: {}}
{_id: 3, a: {"0": ISODate("...")}}
{_id: 4, a: {"1625": ISODate("...")}}
{_id: 5, a: {"0": ISODate("..."), "1625": ISODate("...")}}
{_id: 6, a: {"7": ISODate("..."), "900": ISODate("...")}}

我想查询a字段(如果存在的话,总是一个嵌入式文档)包含至少一个键,其值不是“ 0”的文档。因此,在我的示例中,它将返回文档4、5和6。

我知道我可以通过一个$where子句来做到这一点,但是有没有办法不用它$where呢?

谁-假面真灵魂

您可以尝试下面的聚合查询:

db.collection.find({
    $and: [
      { a: { $type: "object" } },
      { a: { $ne: {} } }, // This is optional but might improve performance by remove empty objects `{}` to next step.
      { $expr: { $gt: [ { $size: { $filter: { input: { $objectToArray: "$a" }, cond: { $ne: [ "$$this.k", "0" ] } } } }, 0 ] } }
    ]
  })

测试: mongoplayground

注意:如果您不想在中执行函数$where可以尝试使用此查询,此查询用于$expr以查询语言执行聚合表达式。

参考: 聚合管道

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章