首页 > 解决方案 > $ne:比较输入日期和数组中的字段

问题描述

我为此创建了一个测试集合,它看起来像这样:

{
    "createDate": ISODate("2021-01-04T15:00:00.000+00:00"),
    "arr": [
        {
            "date": ISODate("2021-01-04T15:00:00.000+00:00")
        }
    ]
},
{
    "createDate": ISODate("2021-01-04T16:00:00.000+00:00"),
    "arr": [
        {
            "date": ISODate("2021-01-04T15:00:00.000+00:00")
        }
    ]
}

唯一的区别是:第一个条目的日期相同,第二个条目的日期不同。

现在我想创建一个查询来查找两个日期不同的所有条目。我用这个试过:

db.getCollection('test').find(
    {
        "createDate": { $ne: "arr.0.date" }
    }
)

不幸的是,这个查询为我提供了两个条目。我究竟做错了什么?

标签: mongodbmongodb-query

解决方案


它需要匹配$expr表达式,比较来自同一文档的字段,以访问来自特定索引的元素使用$arrayElemAt

db.getCollection('test').find({
  $expr: {
    $ne: [
      "$createDate",
      { $arrayElemAt: ["$arr.date", 0] }
    ]
  }
})

操场


推荐阅读