Mongoose: 使用精益来节省?

创建于 2013-10-03  ·  16评论  ·  资料来源: Automattic/mongoose

我想使用精益选项作为保存。
save 的回调也返回一个 mongoose 文档,而不是一个 JS 对象,我想使用类似精益的调用来更改它。

在 saves 的回调函数中使用精益查询和 toObject 对我来说似乎很混乱。

有任何想法吗?

最有用的评论

@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条评论

如果您不想使用精益,那么最好的办法是从返回的 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 我只是指出@refacksave操作的解决方案在 2017 年仍然有效且功能正常,仅此而已;)

@peterpeterparker你说得对。 对不起。 不应该把那个指向你。

@alex-dixon 不用担心

我们应该将lean()Model.create()吗?

永远不会因为您不能将lean()Model.create() :p

知道了 :)

此页面是否有帮助?
0 / 5 - 0 等级