【发布时间】:2014-08-03 03:17:26
【问题描述】:
UPDATE 1:已收到 5 票,因此我已提交功能请求:https://github.com/LearnBoost/mongoose/issues/2637
请在那里投你的 +1 票,让核心团队知道你想要这个功能。
更新 2: See answer below...
原帖:
假设我对集合进行“精益”查询或从 REST 服务接收一些数据,然后我得到一个对象数组(不是猫鼬文档)。
这些对象已经存在于数据库中,但我需要将部分/所有这些对象转换为 mongoose 文档以进行单独编辑/保存。
我已经阅读了源代码,一旦 mongoose 从数据库中获取数据(填充、转换、初始化等),就会发生很多事情,但似乎没有一种方法可以将其“公开”给外面的世界。
我正在使用以下内容,但它看起来很老套($data 是一个普通对象):
// What other properties am I not setting? Is this enough?
var doc = new MyModel( $data );
doc.isNew = false;
// mimicking mongoose internals
// "init" is called internally after a document is loaded from the database
// This method is not documented, but seems like the most "proper" way to do this.
var doc = new MyModel( undefined );
doc.init( $data );
更新:经过更多搜索,我认为还没有办法做到这一点,上面的第一种方法是你最好的选择(mongoose v3.8.8)。如果其他人对此感兴趣,我会提出这样的功能请求(请发表评论或投票):
var doc = MyModel.hydrate( $data );
【问题讨论】:
-
难道不能使用集合中对象上提供的唯一 ID 更新每个单独的文档吗?这样您就不必将对象转换为特定类型,只需更新
Model.update({_id : id}, ...} -
这是一个直接到数据库的事务并且绕过了对文档实例的需求。这里的讨论是关于将一个普通的 JS 对象转换为一个完全转换的猫鼬文档,这样我就可以做一些业务逻辑的事情,比如调用自定义方法、手动触发验证等等......
标签: javascript mongodb object mongoose