【问题标题】:Mongodb include null in array query resultsMongodb 在数组查询结果中包含 null
【发布时间】:2017-06-24 17:34:52
【问题描述】:

我有一个这样的 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} 就可以工作,但这对我来说表现不够好,因为我的用户对象中有很多值。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

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

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

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

    了解更多关于您的应用程序和您引用的集合的使用情况将很有用,以便充分了解您正在实施的内容并进一步提出建议。

    【讨论】:

    • 感谢恩里克! 16MB 的限制对我来说不是一个大问题,因为每个帐户都有自己的文档和与之关联的用户 - 并且最大用户数有限制。现在我通过向用户添加密钥并参考这些来解决这个问题。需要进行一些重构,但我想仍然是解决我的问题的最佳解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多