1

マングーススキーマを考えてみましょう。

var schema_obj = new Schema({
    field1: String,
    field2: String, .........
});

次のようなJSONドキュメント:

var json_obj = {
field1: 'value', 
field2 : 'val2', 
............
};

保存するために、私はメソッドを呼び出します。

var Model_obj = mongoose.model('model_name', schema_object);
var document_obj = new Model_obj(json_obj);
document_obj.save(function(err,data){/*some logic after save*/});

今私の質問は:なぜjson_objを作成する必要があるのですか?すでにすべてのフィールド(field1、field2)を持っているスキーマオブジェクトがすでに手元にある場合。これらのフィールドに値を指定したいだけの場合、すべてのフィールド名を再度書き込んでjsonを作成する必要があるのはなぜですか?

n個のフィールドがある場合、これはすべてのフィールドを再度書き込むためのオーバーヘッドになります。このオーバーヘッドを回避する方法はありますか?

定義したマングーススキーマから空のJSONオブジェクトを取得し、値のみを割り当てて続行するようなものですか?

4

3 に答える 3

3

どのような API をお探しですか? モデル インスタンスとそのプロパティを設定できますsave。でも、その理由を理解しているかどうかはわかりません

var thing = new Thing();
thing.name = "The Name";
thing.priceInCents = 1999;
thing.numAvailable = 10;
thing.save();

よりも簡単です

var thing = new Thing({name: 'The name', priceInCents: 1999, numAvailable: 10});
thing.save();

Web アプリでは、これは次のようになります。

app.post('/things', function(req, res) {
  var thing = new Thing(req.body.thing);
  thing.save(function() { ... });
});
于 2013-01-17T07:36:08.693 に答える
1

以下は私がこれまでに見つけた最良の解決策です

var sch_obj = new mongoose.Schema({
 "_id ": String,
 "field1": String,
 "field2": String
}, { collection: 'collection_name'});

var Mod_obj = mongoose.model('collection_name', sch_obj);

var json_obj = new Mod_obj({
"_id ": 'Strin', /*This is the only field which cannot be assigned later*/
}); 

//json_obj._id = 'some value'; /*THIS CANNOT BE DONE*/
json_obj.field1 = 'value1';
json_obj.field2 = 'value2';
json_obj.save(function (err, data) { console.log(data); });
于 2013-01-17T08:09:46.847 に答える
1

ES6 を使用している場合は、この目的でスプレッド演算子が役立つ場合があります。マングース モデルが定義されていて、req.body からフィールド値を取得していることを考慮してください。次のように記述するだけで、そのモデルの新しいオブジェクトを作成できます。

const Thing = mongoose.model('collection_name', sch_obj); 
const json_obj = new Thing({ ...req.body });
json_obj.save()
.then(savedThing => {
    //DO things with your saved object.
})
.catch(error => {
   //Handle error in saving the object
})
于 2016-12-08T09:33:52.333 に答える