使用Node.JS中的monk将多个文档(批量插入)插入到mongoDB集合中的问题?

时间:2014-11-17 16:19:15

标签: node.js mongodb mongoose mongodb-query monk

我正在尝试将多个文档插入到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。

2 个答案:

答案 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