为什么我要创建一个json来保存来自Mongoose+MongoDB+Node.JS的文档?

为什么我要创建一个json来保存来自Mongoose+MongoDB+Node.JS的文档?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,考虑一下,猫鼬模式: 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 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。 当我手里已经有一个schema对象,它已经有了所有字段field1,field2。如果我只想给这些字段赋值,为什么要通过再次写入所有字段名来创建json

如果我有n个字段,那么再次写入所有字段会增加开销。有没有办法避免这种开销


类似于我从定义的mongoose模式中得到一个空JSON对象,然后只分配值就可以了?

您想要什么样的API?您可以设置模型实例的属性并将其保存。但我不知道我是否明白为什么

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() { ... });
});

你想要什么样的API?您可以设置模型实例的属性并将其保存。但我不知道我是否明白为什么

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() { ... });
});
以下是迄今为止我找到的最佳解决方案 以下是迄今为止我找到的最佳解决方案
如果您使用的是ES6,那么spread操作符可能会在这方面派上用场。考虑到您已经定义了mongoose模型,并且正在从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
})

如果您使用的是ES6,那么spread操作符可能会在这方面派上用场。考虑到您已经定义了mongoose模型,并且正在从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
})

我们不能在模型对象上设置任何属性,但可以在文档对象上设置。代码就在这里。。谢谢你的帮助。我不确定你上一句话是什么意思,但我会同意的。事实上,我的意思是caps T中的对象是模型对象。可能是我对每个文档中的这句话感到困惑,它将是一只小猫,其属性和行为与我们的模式中声明的一样。。。无论如何,感谢您的快速支持。我们不能在模型对象上设置任何属性,但可以在文档对象上设置。代码就在这里。。谢谢你的帮助。我不确定你上一句话是什么意思,但我会同意的。事实上,我的意思是caps T中的对象是模型对象。可能是我对每个文档中的这句话感到困惑,它将是一只小猫,其属性和行为与我们的模式中声明的一样。。。无论如何,谢谢你的快速支持。。