代码之家  ›  专栏  ›  技术社区  ›  Abhishek Taparia

MongoDB查询在数组字段上使用$ne:null的问题

  •  1
  • Abhishek Taparia  · 技术社区  · 1 年前

    背景

    我们正在Node.js应用程序中使用MongoDB查询,我们需要根据数组字段(特别是嵌套数组中的字段)是否存在且不为null来过滤文档。

    考虑以下示例文档:

    {
      "name": "Event1",
      "campaigns": [
        {
          "id": "id1",
          "eID": "eID1"
        }
      ]
    }
    

    问题:

    我们一直在使用以下MongoDB查询:

    1. 查询方式 $exists :
    { "campaigns.eID": { $exists: true } }
    

    结果: 这按预期工作,返回文档 eID 字段存在于任何元素中 campaigns 阵列。

    1. 查询方式 $ne: null :
    { "campaigns.eID": { $ne: null } }
    

    结果: 此查询在我们的Node.js应用程序中无法按预期工作。它返回不一致的结果:有时它无法匹配文档 eID 不是 null undefined .

    附加观察

    • 在MongoDB Compass中测试这些查询时:
      • 这个 $存在 查询始终为所有团队成员返回正确的结果。
      • 这个 $ne:空 对我来说,查询在MongoDB Compass中工作正常,但对我的同事来说不起作用,即使我们对相同的数据使用相同的查询。

    问题

    • 为什么$ne:null查询在不同的环境中表现不一致(Node.js与MongoDB Compass)?
    • 在数组字段中使用$ne:null时,特别是在嵌套文档中,是否存在已知的问题或最佳实践?
    • 在这种情况下,我们应该避免使用$ne:null,而是始终使用$exists吗?
    0 回复  |  直到 1 年前