2016-11-23 2 views
6

Мне интересно, есть ли способ вставить новый документ и вернуть его за один раз.Node.js + MongoDB: вставьте один и верните только что вставленный документ

Это то, что я в настоящее время с помощью:

db.collection('mycollection').insertOne(options, function (error, response) { 
    ... 
}); 
+0

Что вы подразумеваете под возвратом нового? Вы хотите, чтобы ответ от insertOne был документом с ** _ id **? –

+0

нет вы не можете. метод insert просто возвращает подтверждение того, что документ вставлен успешно. вы не можете объединить два действия в одно. вам нужно снова запустить find() после insert() –

ответ

11

ответ результат содержит информацию успеха или нет и номер записи вставленной. но если вы хотите вернуть вставленные данные, то можно попробовать response.ops

db.collection('mycollection').insertOne(doc, function (error, response) { 
    if(error) { 
     console.log('Error occurred while inserting'); 
     // return 
    } else { 
     console.log('inserted record', response.ops[0]); 
     // return 
    } 
}); 
+1

Это сработало! Но это странно, что когда я делаю 'console.log (response)' 'ops' не появляется! – evilReiko

+1

это связано с оценкой значения. – nxmohamad

+0

Спасибо! Он документирован на странице github для драйвера 'mongodb' для' node' в разделе [вставить документ] (https://github.com/mongodb/node-mongodb-native#insert-a-document). Из документов: 'ops - Содержит документы, вставленные с добавленными полями _id'. – margaretkru

2

Вы можете использовать mongoose, чтобы сделать это. С помощью метода save вы можете вставить документ и вернуть его на успех. Вот пример из mongoose documentation:

product.save(function (err, product, numAffected) { 
    if (err) { 
    // Handle error... 
    } else { 
    // Do something with the returned document... 
    } 
}) 
+0

, если документ уже существует, он вернет его. а не новый –

0

Вы можете использовать mongojs, чтобы сделать это.

db.collection('mycollection').save(doc, function(error, response){ 
    // response has _id 
}) 
0

Следующий код работает для меня, в MongoDB версии 2.2.33.

db.collection("sample_collection").insertOne({ 
    field1: "abcde" 
}, (err, result) => { 
    if(err) console.log(err); 
    else console.log(result.ops[0].field1) 
} 
Смежные вопросы