【问题标题】:Mongoose with mongodb how to return just saved object?Mongoose 与 mongodb 如何返回刚刚保存的对象?
【发布时间】:2011-11-20 17:10:06
【问题描述】:

我是 mongoose/mongodb 的新手

假设我正在保存一些东西:

var instance = new TestingModel();
instance.test = 'blah2';
instance.save();

所以当我保存数据库中的实例 obj 时,_id 和测试。但是 _id 属性只有在进入 db 后才会添加到对象中。注意:我之前不想给它一个 id。但是,我想抓取数据库中的对象,因为我需要使用 _id 值,但我不想再次查询它。有没有办法将对象保存在数据库中并自动返回数据库对象,以便获取 _id 值?

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    _id 应该在保存后出现:

    var instance = new TestingModel()
    
    instance.test = 'blah'
    
    instance.save(function(err){
        console.log(instance._id) // => 4e7819d26f29f407b0...
    })
    

    编辑:实际上_id 是在实例化时设置的,所以在保存之前它应该已经存在:

    var instance = new TestingModel()
    console.log(instance._id) // => 4e7819d26f29f407b0...
    

    【讨论】:

    • 不错!刚刚测试了这个。嘿,这样的文档在哪里?
    • 你知道有什么方法可以解决我的问题,即使你的回答对我有帮助?只是想知道......
    • 刚才又看了一遍,好像是在创建对象的时候生成了_id,所以直接从instance._id抓取就行了。
    • 这并没有完全回答这个问题,这个问题要求返回刚刚保存的对象而不是它的 id
    • 这很好用。谢谢
    【解决方案2】:
    router.post('/', function(req, res) {
        var user = new User();
        user.name = req.body.name;
        user.token = req.body.token;
    
        user.save(function(err, obj) {
            if (err)
                res.send(err);
    
            res.json({ message: 'User created!', data: obj });
        });
    });
    

    【讨论】:

      【解决方案3】:

      正确的检查方式是save的回调:

      instance.save(function(err,savedObj){
          // some error occurs during save
          if(err) throw err;
          // for some reason no saved obj return
          else if(!savedObj) throw new Error("no object found") 
          else console.log(savedObj);
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-08
        • 2019-08-30
        • 2016-06-30
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 2014-12-19
        • 1970-01-01
        相关资源
        最近更新 更多