2016-11-23 11 views
6

Zastanawiam się, czy istnieje sposób na wstawienie nowego dokumentu i zwrócenie go za jednym razem.Node.js + MongoDB: wstaw jedną i zwróć nowo wstawiony dokument

To co obecnie używam:

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

Co rozumiesz przez zwrot nowego? Chcesz, aby odpowiedź z insertOne była dokumentem z ** _ id **? –

+0

nie, nie możesz. insert method po prostu zwróci potwierdzenie, że dokument został wstawiony pomyślnie. nie można łączyć dwóch akcji w jedno. musisz wypalić find() ponownie po wstawieniu() –

Odpowiedz

11

odpowiedź wynik zawierać informację o powodzeniu lub nie i ilości włożonej płycie. ale jeśli chcesz, aby powrócić wstawione dane następnie mogą spróbować 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

To zadziałało! Ale to trochę dziwne, że kiedy robię 'console.log (odpowiedź)' 'ops' nie pojawia się! – evilReiko

+1

ma to związek z oceną wartości. – nxmohamad

+0

Dzięki! Jest to udokumentowane na stronie github dla 'mongodb' sterownika dla' węzła' w sekcji [wstaw dokument] (https://github.com/mongodb/node-mongodb-native#insert-a-document). Z dokumentów: 'ops - Zawiera dokumenty wstawione z dodanymi polami _id. – margaretkru

2

Można użyć mongoose to zrobić. Metodą save można wstawić dokument i zwrócić go po pomyślnym zakończeniu. Oto przykład z mongoose documentation:

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

na wypadek, gdyby dokument już tam był, to go zwróci. nie nowy –

0

Można użyć mongojs to zrobić.

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

Poniższy kod pracował dla mnie, w MongoDB wersji 2.2.33.

db.collection("sample_collection").insertOne({ 
    field1: "abcde" 
}, (err, result) => { 
    if(err) console.log(err); 
    else console.log(result.ops[0].field1) 
} 
Powiązane problemy