如何在MongooseJS中使用{upsert:true}获取findOneAndUpdate的创建对象?

时间:2015-05-25 20:52:28

标签: node.js mongodb mongoose mean-stack meanjs

我在做什么:

Book.findOneAndUpdate(
    {_id: id_from_api},
    {$set: bookObj},
    {upsert: true},
    function (err, book) {
        handleError(err);
        console.log(book);
    }
);

我希望本书可以作为书籍文档,但它只是一个文档存在,而不是因为upsert是真的而创建的。

我的问题是:我如何获得新创建的图书文件?

更新 只需明确将选项new设置为true

即可
Book.findOneAndUpdate(
    {_id: id_from_api},
    {$set: bookObj},
    {upsert: true, new: true},
    function (err, book) {
        handleError(err);
        console.log(book);
    }
);

2 个答案:

答案 0 :(得分:0)

您可以预先实例化图书对象,如下所示:

1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
   System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15
   System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
   System.Web.Mvc.Async.WrappedAsyncResult

答案 1 :(得分:0)

findOneAndUpdate的文档中,有一个名为new的选项,以前默认为true

new: bool - if true, return the modified document rather than the original.
defaults to false (changed in 4.0)