3

Mongoose クエリによって返されたオブジェクトを変更するにはどうすればよいですか?

次のスキーマがあるとします。

var S = new mongoose.Schema( { 'name': String, 'field': String } );

結果に対して次のクエリと変更を行います。

var retrieve = function(name, callback) {
    S.findOne({ name: name }).exec(function (err, obj) {
      if (err) return handleError(err);
      obj['field'] = 'blah';
      callback(obj);
    });
}

にはobj.field含まれませんblahが、読み取り専用であるかのように、クエリによって返された元の値が含まれます。何が起こっている?

注: 私の環境は Node.js、Express、Mongoose、および MongoDB です。

4

2 に答える 2

3

注:これは編集です。私の元の答えはかなり異なっていました

これは少しややこしいですが、Mongoose はプレーンな JSON オブジェクトではなく、MongooseDocument オブジェクトを返します。したがって、obj で .lean() メソッドを使用して JSON に変換し、そこから必要に応じて変更を開始します。

Ze Jibeに感謝します。

于 2013-03-27T22:36:21.547 に答える
2

The doc object returned from mongoose is somehow read only. To get a writeable object from it you must run:

var writeableObject = doc.toObject()
writeableObject['field'] = 'blah'
res.send(writeableObject)

Scroll down to "Transform" in the mongoose documentation to read more: link

于 2013-05-05T05:54:25.427 に答える