Проблема при вставке нескольких документов (Bulk Insert) в коллекцию mongoDB с помощью monk в Node.JS?
Я пытаюсь вставить несколько документов в коллекцию в базе данных mongoDB, но в качестве ответа я получаю только один идентификатор объекта (в БД создается несколько документов).
Код:
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);
});
};
в этом отношении Doc будет массив
Входные данные:
newRelDocs_Array: [ {
path: [ 53d0b191c5ac61d403b0090d ]
tob: 1405343247 },
{
path: [ 53d0b191c5ac61d403b0090d ],
tob: 1405343247 } ]
Отклик:
createRelation(): Success
createRelation_db: {
_id: 546a1d6f65c05d1c37660c4c,
tob: 1405343247
}
К вашему сведению, я использую NodeJS и соединение с MongoDB с монахом.
2 ответа
Оболочка коллекции Monk обеспечивает доступ к базовому объекту коллекции через .col
поле. Вы можете использовать его для доступа к методам, не реализованным Monk, таким как массовая вставка и агрегат:
var relations = db.get("relations");
var docs = [ {
path: [ "53d0b191c5ac61d403b0090d" ],
tob: 1405343247
}, {
path: [ "53d0b191c5ac61d403b0090d" ],
tob: 1405343247
} ];
relations.col.insert(docs, callback);
Обратите внимание, что с .col
однако вы не сможете использовать функцию обещаний, предоставляемую монахом. Смотрите здесь для получения дополнительной информации.
В своем вопросе вы говорите, что realationDoc - это массив, который, как я полагаю, выглядит примерно так:
realationDoc = [{
id: 1,
relation: 2
},{
id: 2, relation: 1
}];
В Monk функция вставки не поддерживает встроенную функцию 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
}
Вероятно, не так эффективно, как Bulk Insert, предоставляемая в родном драйвере, но она должна привести вас туда, куда вам нужно пойти с монахом.