Mongodb在数组查询结果中包含null

Mongodb在数组查询结果中包含null,mongodb,mongoose,Mongodb,Mongoose,我有一个像这样的MongoDB文档 { _id: ObjectId("53ea4bcb311164af033743fd") "users": [ { "name": "Paul" "age": 36 }, null, { "name": "Steve", "age": 74 } ] } 我可能不是最好的设计选择,但我决定使用数组的索引作为用户键。 现在我想提高查询的性能,只需使用查询投影中所需的

我有一个像这样的MongoDB文档

{
  _id: ObjectId("53ea4bcb311164af033743fd")
  "users": [
    {
      "name": "Paul"
      "age": 36
    },
    null,
    {
      "name": "Steve",
      "age": 74
    }
  ]
}
我可能不是最好的设计选择,但我决定使用数组的索引作为用户键。 现在我想提高查询的性能,只需使用查询投影中所需的字段,因此查询如下所示:

db.accounts.findOne('53ea4bcb311164af033743fd', {'users.name': 1});
这是回报

{
  _id: ObjectId("53ea4bcb311164af033743fd")
  "users": [
    {
      "name": "Paul"
    },
    {
      "name": "Steve"
    }
  ]
}

现在有没有办法也包含
null
,这样索引就正确了?我知道它只适用于使用投影
{'users':1}
,但这对我来说不够好,因为我的用户对象中有很多值。

正如你在问题中提到的,这可能不是最适合您的用例的实现,因为您的数组中存储的不是同构对象,而是空值和文档

findOne命令不会带来空值,因为您正在请求数组字段的每个对象中名为“name”的字段

通过嵌入带有“name”和“age”字段的文档来实现1:N关系是一个危险而脆弱的决定,可能会导致超过文档最大大小16MB,如中所述


了解更多关于您的应用程序以及您所引用的集合的使用情况将非常有用,以便全面了解您正在实施的内容并提出进一步建议。

谢谢Enrique!16MB的限制对我来说不是什么大问题,因为每个帐户都有自己的文档和与之相关的用户,并且对最大用户数有限制。目前,我通过向用户添加密钥并引用这些密钥解决了这个问题。需要进行一些重构,但我想这仍然是解决我问题的最佳方案。