我想使用精益选项作为保存。
save 的回调也返回一个 mongoose 文档,而不是一个 JS 对象,我想使用类似精益的调用来更改它。
在 saves 的回调函数中使用精益查询和 toObject 对我来说似乎很混乱。
有任何想法吗?
如果您不想使用精益,那么最好的办法是从返回的 Mongoose 对象中形成一个新对象
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”之类的保存函数的回调返回模式对象,我不能使用精益来拥有纯 JS 对象。
这是我的问题。 我也想使用精益进行保存和更新。
@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不,因为要保存的回调中的第二个参数是完全相同的文档。 Mongoose 不会向数据库询问新更新的文档。 例如,
user.save(function(err, _user){
user === _user; // true
});
哦,好的,明白了:) 我不好
作为记录, @refack上面提供的解决方案在 2017 年仍然有效
@peterpeterparker我不同意,并认为对于希望从所有数据库操作而不是 Mongoose 实例返回数据的用户来说,这仍然是一个问题。
@alex-dixon 我只是指出@refack的save
操作的解决方案在 2017 年仍然有效且功能正常,仅此而已;)
@peterpeterparker你说得对。 对不起。 不应该把那个指向你。
@alex-dixon 不用担心
我们应该将lean()
与Model.create()
吗?
永远不会因为您不能将lean()
与Model.create()
:p
知道了 :)
最有用的评论
@imrefazekas 、 Save、Update、Create 和 Remove 不是“查询”,因此它们不会按原样采用
.lean()
指令。您可以在返回的对象上使用
.toObject()
方法来获取它而没有架构: