0

我正在尝试将多个文档插入到 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,并与和尚连接到 MongoDB。

4

2 回答 2

0

在您的问题中,您说 realationDoc 是一个数组,我认为它看起来像这样:

realationDoc = [{
  id: 1,
  relation: 2
 },{
  id: 2, relation: 1
 }];

在mongodb 2.4 内置函数Bulk Insert 中,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
}

可能不如本机驱动程序中提供的批量插入那么有效,但应该可以让您到达您需要与和尚一起去的地方。

于 2014-12-12T10:14:55.027 回答
0

.colMonk 集合包装器通过字段提供对底层集合对象的访问。您可以使用它来访问 Monk 未实现的方法,例如批量插入和聚合:

var relations = db.get("relations");
var docs = [ { 
              path: [ "53d0b191c5ac61d403b0090d" ],
              tob: 1405343247
             }, {
              path: [ "53d0b191c5ac61d403b0090d" ],
              tob: 1405343247
             } ];
relations.col.insert(docs, callback);

但是请注意,.col您将无法使用僧侣提供的承诺功能。请参阅此处了解更多信息。

于 2015-05-08T08:16:49.613 回答