Mongoose: 保存にリーンを使用しますか?

作成日 2013年10月03日  ·  16コメント  ·  ソース: Automattic/mongoose

保存はリーンオプションを使用したいのですが。
saveのコールバックは、leanのような呼び出しを使用して変更したいJSオブジェクトではなく、マングースドキュメントも返します。

セーブのコールバック関数でクエリとtoObjectにleanを使用することは、私には混乱のように思えます。

何か案は?

最も参考になるコメント

@ imrefazekas 、Save、Update、Create、およびRemoveは「クエリ」ではないため、 .lean()ディレクティブをそのまま使用しません。
返されたオブジェクトで.toObject()メソッドを使用して、スキーマなしでオブジェクトを取得できます。

p.save(function (err, returned) {
  var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
  assert.equal(leanObject.schema, null);
});

全てのコメント16件

リーンを使用したくない場合は、返されたマングースオブジェクトから新しいオブジェクトを作成するのが最善の策です。

Person.findOne({
    _id: req.user.id
}, function(err, result) {
    if (err)
        return next(err);

    return (200, {
        id: result._id,
        spouse: result.spouse,
        children: result.children
    });
});

たぶん私の投稿は明確ではありませんでした、ごめんなさい。
リーンを使いたいのですが、節約操作も使いたいです。
「save」や「update」などの保存関数のコールバックはスキーマオブジェクトで返され、leanを使用して純粋なJSオブジェクトを作成することはできません。
これが私の問題です。 保存と更新にもleanを使用したいと思います。

@ imrefazekas 、Save、Update、Create、およびRemoveは「クエリ」ではないため、 .lean()ディレクティブをそのまま使用しません。
返されたオブジェクトで.toObject()メソッドを使用して、スキーマなしでオブジェクトを取得できます。

p.save(function (err, returned) {
  var leanObject = returned.toObject(); // has many options: http://mongoosejs.com/docs/api.html#document_Document-toObject
  assert.equal(leanObject.schema, null);
});

hummity hums ... save()は無駄のないオプションが必要ですか?

save()と無駄のない作業をどのように想像しますか? 意味をなさないAFAIK。

うーん、数日経ちましたが、現在はそうです

user.save(function(err,user){

      //user is full-fledged etc
});

リーンオプションを使用すると、

user.save({
  lean:true
},function(err,user){

      //user is *not* full-fledged etc
});

そうじゃない?

@ORESoftwareいいえ、保存するコールバックの2番目のパラメーターはまったく同じドキュメントであるためです。 Mongooseは、データベースに新しく更新されたドキュメントを要求しません。 例えば、

user.save(function(err, _user){
  user === _user; // true
});

ああ、わかった:)私の悪い

記録として、 @ refackによって上記で提供されたソリューションは2017年でも魅力のように

@peterpeterparker同意し

@ alex- dixon save操作の@refackのソリューションは、2017年でもまだ有効で機能していることを指摘していましたが、それ以上でもそれ以下でもありません;)

@peterpeterparkerその通りです。 ごめん。 それをあなたに向けるべきではなかった。

@ alex-dixon心配ありません

lean()Model.create()と一緒に使用する必要がありますか?

lean()Model.create() lean()を使用できないからではありません:p

とった :)

このページは役に立ちましたか?
0 / 5 - 0 評価