【问题标题】:How to prevent MongoDB from returning the object ID when finding a document?如何防止MongoDB在查找文档时返回对象ID?
【发布时间】:2014-04-02 23:44:07
【问题描述】:

我在 MongoDB 中有以下文档...

{
  "_id" : ObjectId("531221cd960100960116b992"),
  "username : "joe",
  "address" : [
    {
      "zip" : "8000",
      "city" : "Zurich"
    },
    {
      "zip" : "6900",
      "city" : "Lugano"
    }
  ]
}

...为了检索第二个地址,我使用以下语句:

db.users.find({ _id: ObjectId("531221cd960100960116b992") }, { addresses: { $slice: [0, 1] } } )

这可行,但它也返回对象 id:

{ "addresses" : [ { "zip" : "6900", "city" : "Lugano" } ], "_id" : ObjectId("531221cd960100960116b992") }

如何防止 MongoDB 返回对象 ID?我知道我应该提供像 _id : 0... 这样的投影,但我应该把它放在上面的表达式中的哪里?我做了很多尝试......但没有成功。

谢谢。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    通过

    {'_id': false}
    

    作为find()的参数

    db.users.find({ _id: ObjectId("531221cd960100960116b992")}, { addresses: { $slice: [0, 1] } ,'_id': false} )
    

    【讨论】:

    • 它应该是假小写(或0)
    • @IlanFrumer 谢谢。整天都在用 Python 工作!
    • addresses: { $slice: [0, 1] } 应该粘贴在第二个参数(投影)中,而不是粘贴到查询参数中。
    • 也许我做错了什么......但如果我复制并粘贴你的 find() 语句,我会收到错误:{ "$err" : "invalid operator: $slice", "code" : 10068 }
    • 不,现在我得到了完整的所有文件(即它们还包括“地址”之外的字段
    【解决方案2】:

    这与@hanleyhansen 的答案完全相同,但只是为了让您知道您可以将 0 与 false 互换使用:

    db.users.find(
      { _id: ObjectId("531221cd960100960116b992")},
      { addresses: { $slice: [0, 1] } ,'_id': 0}
    )
    

    【讨论】:

    • 这是我一直在寻找的...并且它有效:db.users.find({ _id: ObjectId("531221cd960100960116b992")}, {addresses: { $slice: [0, 1 ] } ,'_id': 0, 'addresses': 1} ) - 我错过了地址:1 ;-)
    • 如何在架构级别重新字符串?
    【解决方案3】:

    使用此代码

     db.yourCollectionName.find({},{_id:0})
    

    【讨论】:

      【解决方案4】:

      对于任何使用字符串值来限制返回数据的人 - 只需将 -_id 作为选项之一传递:

      User.find(
          { name: "John Doe" },
          "name photo bio -_id", // <-- "-_id"
          { limit: 25 },
          function (err, users) {
            return res.status(200).send({
              success: true,
              users,
            });
          }
        );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-18
        • 1970-01-01
        • 2015-07-14
        • 2021-08-14
        相关资源
        最近更新 更多