Javascript 重复的Mongo文档在保存回调函数中没有_id
我刚接触猫鼬和猫鼬,我需要一些帮助。我正在尝试使用node.js和mongoose复制Mongo中的现有文档 我的过程是:Javascript 重复的Mongo文档在保存回调函数中没有_id,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我刚接触猫鼬和猫鼬,我需要一些帮助。我正在尝试使用node.js和mongoose复制Mongo中的现有文档 我的过程是: 查找要复制的文档 创建一个新的Schema对象,传入第一个文档的Schema对象,该对象是在第一步中检索到的 删除在步骤2中创建的对象的“\u id”属性 保存新对象 这个很好用。问题是我需要另一种文档类型,它保存一个id作为对这种文档类型的引用。在成功回调中,传入的对象没有“\u id”字段的值。这就是我试图抓取它保存在另一个文档中的地方。但是,当我检查数据库时,文档已成
async.each(cards, function(card, nextCard) {¬
¬
var newCard = new Card(card);¬
newCard.story_id = story._id;¬
newCard.linkedElements = [];¬
¬
newCard._id = null;¬
delete newCard._id;¬
// The id has been removed to avoid¬
// duplicates in mongo.¬
¬
newCard.save(function(err, savedCard) {¬
¬
if (err) {¬
console.log('err', err);¬
process.exit();¬
}¬
// There were no errors.¬
¬
// The current card was duplicated.¬
¬
Element¬
.find({'card_id': card._id}, function(err, elements) {¬
¬
if (err) {¬
console.log('err', err);¬
process.exit();¬
}¬
// There were no errors.¬
¬
async.each(elements, function(element, nextElement) {¬
¬
var newElement = new Element();¬
¬
console.log('New card : ', newCard);¬
console.log('Saved card : ', savedCard);¬
¬
newElement.card_id = savedCard._id;¬
** I BELIEVE THIS IS THE PROBLEM! **
¬
newElement._id = null;¬
delete newElement._id;¬
// The id has been removed to avoid¬
// duplicates in mongo.
控制台日志和节点的输出:
New card : { story_id: 53f0e8f3c45582e00927a501,
rank: 1,
published: 'true',
__v: 0,
_id: null,
linkedElements: [] }
Saved card : { story_id: 53f0e8f3c45582e00927a501,
rank: 1,
published: 'true',
__v: 0,
_id: null,
linkedElements: [] }
POST /admin/stories/duplicate/53f0e4c1c973f73b08942591 200 18ms - 277b
err { [VersionError: No matching document found.] message: 'No matching document found.', name: 'VersionError' }
我想知道为什么它会起作用。当您在
mongoose
document上调用.save()
时,它会发出一个update
操作,只向MongoDB发送更新的字段。它使用MongoDBsave
命令,只使用insert
和update
mongoose可能只检查insert
/update
操作的状态
我可以给你两个选择
1.在调用新卡之前删除\u id
:
delete card._id;
var newCard = new Card(card);
或者,如果卡
是猫鼬
文档:
card_data = card.toObject();
delete card_data._id;
var newCard = new Card(card_data);
2.设置新的\u id
字段,而不是将其删除:
newCard._id = new mongoose.Types.ObjectId();
第一种方法对我不管用,但第二种方法管用。谢谢