背景
我们正在Node.js应用程序中使用MongoDB查询,我们需要根据数组字段(特别是嵌套数组中的字段)是否存在且不为null来过滤文档。
考虑以下示例文档:
{
"name": "Event1",
"campaigns": [
{
"id": "id1",
"eID": "eID1"
}
]
}
问题:
我们一直在使用以下MongoDB查询:
-
查询方式
$exists
:
{ "campaigns.eID": { $exists: true } }
结果:
这按预期工作,返回文档
eID
字段存在于任何元素中
campaigns
阵列。
-
查询方式
$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吗?