我有以下mongoose架构:
var mongoose = require('mongoose');
module.exports = mongoose.model('lf', {
_set : {type:Number},
a : {type:String},
b : {type:String},
c : {type:Number},
created_at : {type: Date, default: Date.now},
updated_at : {type: Date, default: Date.now}
},'flr');
在我的代码中,我查询了一些集合并生成了一个包含上述模式的拼接json对象。
虽然当我在mongoose上进行save()操作时,我一直得到:
Collection1.findOne({tfC: tfC}).lean().then(FP=> {
if ( FP!== null && FP!== undefined ){
new linkedFixed(FP).save(function(err, result){
console.log(err);
process.exit();
});
}
}).catch(error => {
console.error(error);
});
我收到错误:
{ MongoError: E11000 duplicate key error collection: Da.flr index: _id_ dup key: { : ObjectId('5a0c8b3f10dfe503505fcaec') } at Function.MongoError.create
我没有在我的架构中定义这个_id,所以为什么mongoose会在这个索引上生成重复的条目?
我能够理解查找中的json对象已经包含_id。然后我删除了这个,我收到错误:
MongooseError: document must have an _id before saving
如何在不传递_id的情况下将json对象保存到集合中? SHould'nt _id是由mongoose随机分配的吗?
答案 0 :(得分:0)
问题来自精益()。当使用精益_id从mongoose查询返回时。
如果删除lean()_id不是文档内容的一部分,因此不会覆盖。
答案 1 :(得分:0)
在findOne方法中使用$ project以避免从查询返回_id(Object ID),如下所示:
Collection1.findOne({tfC: tfC},{_id:0})
有关详细信息,请参阅MongoDB Aggregation $project
答案 2 :(得分:0)
正如@JoaoFilipeClementeMartins所说,问题在于你正在获得_id,你正在将_id传递给新对象并尝试保存它。另一种可能的解决方案是在将_id设置为新对象之前删除它。
delete FP._id;
new linkedFixed(FP).save(function(err, result){