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

时间:2017-01-20 11:33:11

标签: mongodb mongoose

我有像这样的MongoDB文件

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

我可能不是最好的设计选择,但我决定使用数组的索引作为userKey。 现在我想提高查询的性能,只使用查询投影中所需的字段,因此查询如下所示:

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

返回

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

现在有没有办法包括null,所以索引是正确的?我知道它只使用投影{'users': 1},但这对我来说效果不佳,因为我的用户对象中有很多值。

1 个答案:

答案 0 :(得分:0)

正如您在问题中提到的,考虑到您的数组没有存储同类对象但是空值和文档,这可能不是最适合您的用例的实现。

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

通过嵌入具有字段“名称”和“年龄”的文档来实现1:N关系是一个风险和脆弱的决定,可能导致超过16MB的最大文档大小,如MongoDB documentation中所述

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