Him*_*edi 3 javascript mongoose mongodb node.js
我有一个事件对象,它是通过Mongoose插件从MongoDB中获取的.在这个对象中完成了一些操作,最后我想将这个对象保存在另一个具有相同结构的集合中.
为此,我需要删除所有属性从"_"或"__"开始,如"_id"和"__v".我编写的代码如下:
console.log(event);
console.log(delete event._id);
console.log(event);
Run Code Online (Sandbox Code Playgroud)
第1行和第3行使用_id属性打印相同的值.如果我删除一些其他属性,如"代码",同样的工作正常.这是完整的事件对象:
{ _id: 5a51019b211d740a174a1fba,
__t: 'EventModel',
code: '02',
event: 'testMe',
source: 'user',
target: 'cronjob',
__v: 0,
params:
[ { key: 'Nodics',
value: 'Framework',
_id: 5a51019b211d740a174a1fbb } ],
log: [ 'Published Successfully' ],
hits: 1,
type: 'ASYNC',
state: 'FINISHED',
testProperty: 'Nodics Framework',
updatedDate: 2018-01-13T17:04:15.288Z,
creationDate: 2018-01-13T17:04:15.288Z
}
Run Code Online (Sandbox Code Playgroud)
请帮助我了解根本原因以及我如何处理这个问题.对我来说,它看起来直接或继承属性问题.但需要专家评论.
看起来你无法删除其中一些属性的原因是它们被定义为" 不可配置".但是,您的方法是次优的,因为它必然会改变其参数.永远不要改变一个论点.永远.
event您应该构建一个仅包含所需属性的新对象,而不是从中删除属性.
Object.getOwnPropertyNames像lodash这样的图书馆有糖来做这种事情:
// whitelist (using lodash)
var saveableEvent = _.pick(event, ['code', 'event', 'source', 'target', 'params', 'log', 'hits', 'type', 'state', 'testProperty', 'updatedDate', 'creationDate']);
// or blacklist (using lodash)
var saveableEvent = _.omit(event, ['_id', '__t', '__v']);
// only copy object's own properties (without lodash)
var saveableEvent = Object.getOwnPropertyNames(event)
.reduce(function(out, propName) {
return Object.assign(out, event[propName])
}, {})
// create editable copy of object, then remove undesired props
var saveableEvent = event.toObject();
delete saveableEvent._id;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |