【发布时间】:2013-06-19 02:57:39
【问题描述】:
我想要一个方法来创建或更新政策文档。搜索和尝试不同的技术,如this one,我为我的文档想出了一个空 _id。使用 findByIdAndUpdate 也有类似的效果。
我看到集合中插入了一个文档,但 _id 字段为空:
exports.savePolicy = function (plcy, callback) {
console.log('priority is : ' + plcy.priority)
try {
var policy = new Policy(plcy);
var query = {_id: plcy._id}; //this may be null
var update = {
name: plcy.name || defaults.policyDefaults.name,
longDescription: plcy.longDescription || defaults.policyDefaults.longDescription,
shortDescription: plcy.shortDescription || defaults.policyDefaults.shortDescription,
priority: plcy.priority, colorHex: plcy.colorHex || defaults.policyDefaults.colorHex,
settings: plcy.settings || [],
parentPolicyId: plcy.parentPolicyId || null
}
Policy.findOneAndUpdate(query, update, {upsert: true}, function (err, data) {
callback(err, data);
});
} catch (e) {
log.error('Exception while trying to save policy: ' + e.message);
callback(e, null);
}
当 _id 不是更新时,有什么办法可以让 _id 不为空?
【问题讨论】:
-
你有没有想过这个问题?我遇到了同样的问题。我最终手动检查了 _id,然后调用 findOneAndUpdate 进行更新或调用 create() 获取新记录。