Rya*_*ale 23 javascript object mongoose mongodb
更新1:已收到5票,因此我提交了一项功能请求:https://github.com/LearnBoost/mongoose/issues/2637
请在那里投票+1票,让核心团队知道你想要这个功能.
更新2: 见下面的答案 ......
原始邮寄:
假设我对集合执行"精益"查询或从REST服务接收一些数据,我得到一个对象数组(而不是mongoose文档).
这些对象已经存在于数据库中,但是我需要将这些对象中的一些/全部转换为用于单独编辑/保存的mongoose文档.
我已经通过源读取并有很多事情一旦猫鼬从数据库中有数据(填充,铸造,初始化等),但似乎没有成为"暴露"这给外界的方法.
我使用以下,但它似乎hacky($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 );
Run Code Online (Sandbox Code Playgroud)
更新:经过更多的搜索,我认为还没有办法做到这一点,上面的第一种方法是你最好的选择(mongoose v3.8.8).如果其他人对此感兴趣,我会针对此类内容发出功能请求(请发表评论或发表评论):
var doc = MyModel.hydrate( $data );
Run Code Online (Sandbox Code Playgroud)
发布我自己的答案,这样就不会保持开放状态:
版本4模型(2015-03-25发布的稳定版)现在公开了一种hydrate()方法.最初的所有字段都不会被标记为脏,这意味着save()在字段发生变异之前调用将不执行任何操作.
请注意,这非常重要,可用于将从数据库加载的普通JS对象转换为mongoose文档.如果您从REST服务或类似的东西收到文档,则应使用findById()和update().
对于那些生活危险的人:
如果你真的想在不触及数据库的情况下更新现有文档,我想你可以调用hydrate(),将字段标记为脏,然后调用save().这doc.isNew = false;与我在原始问题中建议的设置方法没有什么不同(除了你不必将字段标记为脏).然而,瓦列里(来自猫鼬队)建议不要这样做.它可能会在某些情况下导致验证错误(和其他问题),通常不是好的做法.
| 归档时间: |
|
| 查看次数: |
5152 次 |
| 最近记录: |