【问题标题】:How to get the unique id of a MongoDB object when inserting插入时如何获取MongoDB对象的唯一ID
【发布时间】:2016-01-20 13:12:05
【问题描述】:

我正在使用 MongoDB(目前使用 Mongojs)开发 NodeJS express 应用程序,但无法弄清楚如何用它做某事。

我需要将一个对象插入到集合中,并立即获取这个新插入的唯一标识符以存储为变量,以供以后在应用程序中使用。我对使用 Mongo 很陌生,但据我所知,有一个“_id”字段自动生成为任何集合的主键?这似乎是我需要的,如果我错了,请纠正我。

任何帮助将不胜感激。 再次感谢。

【问题讨论】:

    标签: javascript node.js mongodb express mongojs


    【解决方案1】:

    使用 MongoJS,您可以在 collection.save()collection.insert() 上使用回调,例如:

    db.myCollection.save({
        foo: 'foo',
        bar: 'bar'
    }, function (err, doc) {
        // here, the doc will have the generated _id
        console.log(doc);
        /* output:
        {
            "foo": "foo",
            "bar": "bar",
            "_id": "569f1730fde60ac030bc223c"
        }
        */
    });
    

    【讨论】:

    • 这太酷了。有没有办法从回调函数中获取该值?
    • @Nodal 这有点棘手,你在这里有一些答案:stackoverflow.com/questions/6847697/…(也检查链接的“重复”),基本上,你不能,你必须使用它。建议的解决方案之一是使用 Promises,MongoJS 不支持它们,但官方的 mongodb 驱动程序或 mongoose(如果您需要 ODM/ORM 等高级功能)支持。
    • 再次感谢。我有点预测到这个答案。仍然试图让我的头脑围绕承诺 - 我理解这个概念,但与所有事情一样,在实现和语法上都遇到了困难。我认为可能值得放弃 MongoJS 是对的吗?
    • @Nodal,如果没有 Promises,我个人无法使用 async :p 关于 mongodb,官方驱动程序有 Promise 支持,它是我唯一用于所有直接操作(批量插入、查找、聚合)的驱动程序...)。我保留 Mongoose 用于特定用途。我从来没有使用过 MongoJS,但没有 Promises 对我来说是一个交易破坏者。开始使用 Promise 的一个很好的方法:github.com/stevekane/promise-it-wont-hurt
    • 谢谢,我想我一直在推迟不可避免的事情。是时候兑现这些承诺了。如果我可以按照我的想法使用它们,那么 MongoJS 将直接走出窗外(我一开始没有选择它)。再次感谢,再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    相关资源
    最近更新 更多