我正在尝试将多个文档插入到mongoDB数据库的集合中,但我只获得一个对象ID作为响应(在数据库中创建了多个文档)。
代码:
exports.createRelation = function(relationDoc, db, callback) {
var relations = db.get("relations");
relations
.insert( relationDoc )
.error( function ( err ) {
callback(err, null);
})
.success( function ( doc ){
callback(null, doc);
});
};
在这里,relationDoc将是一个数组
输入:
newRelDocs_Array: [ {
path: [ 53d0b191c5ac61d403b0090d ]
tob: 1405343247 },
{
path: [ 53d0b191c5ac61d403b0090d ],
tob: 1405343247 } ]
回应:
createRelation(): Success
createRelation_db: {
_id: 546a1d6f65c05d1c37660c4c,
tob: 1405343247
}
仅供参考,我正在使用NodeJS,并与monk连接到MongoDB。
答案 0 :(得分:0)
在你的问题中,你说realationDoc是一个我认为看起来像这样的数组:
realationDoc = [{
id: 1,
relation: 2
},{
id: 2, relation: 1
}];
在僧侣中,插入功能不具备MonogoDB 2.4内置功能Bulk Insert。见http://docs.mongodb.org/manual/reference/method/Bulk.insert/
使用您的代码,您将创建一个包含2个字段的单个文档的集合,1表示自动生成的_id,以及作为数组的第二个字段。
要做你想做的事,你需要修改你的代码:
for(var i = 0; i<relationDoc.length;i++){
relations.insert(relationDoc[i])
//..add promise code for success and error stuff
}
可能没有本机驱动程序中提供的批量插入效率那么高效,但是应该让你到达需要和僧侣一起去的地方。
答案 1 :(得分:0)
Monk集合包装器通过.col
字段提供对底层集合对象的访问。您可以使用它来访问Monk未实现的方法,例如批量插入和聚合:
var relations = db.get("relations");
var docs = [ {
path: [ "53d0b191c5ac61d403b0090d" ],
tob: 1405343247
}, {
path: [ "53d0b191c5ac61d403b0090d" ],
tob: 1405343247
} ];
relations.col.insert(docs, callback);
请注意,使用.col
时,您将无法使用monk提供的promises功能。有关详情,请参阅here。