/ / Mongodb wstaw callback nigdy nie wywoływany - javascript, node.js, mongodb

Monback nie wstawia wywołania zwrotnego nigdy nie wywoływanego - javascript, node.js, mongodb

To pytanie jest kontynuacją ten i pomyślałem, że lepiej zadać nowe pytanie niż zamieścić komentarz i nekropolię.

(TL; DR dają rozwiązanie umożliwiające uzyskanie identyfikatora _id po wstawieniu kolekcji)

Próbowałem ze skryptem bash .js lub w konsoli nie wydaje się działać:

var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc[0]._id;
});

Zmienna nie zmienia się. W konsoli polecenie powraca WriteResult({ "nInserted" : 1 }) ale ostatni jest nadal nieważny, aw js ma taką samą wartość jak poprzednio.

Czy istnieje sposób na uzyskanie identyfikatora bez Node.js? Czy powinienem przejść na Node.js?


Mój skrypt bash jest naprawdę sprawiedliwy mongo --eval "<my whole javascript>"

Odpowiedzi:

1 dla odpowiedzi № 1

Brakuje ci jednego wyrazu w wyrazie twarzy.

var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc.ops[0]._id;
});

newDoc zawiera całą odpowiedź mongo.

newDoc.ops zawiera tablicę wstawionych wierszy.

newDoc.insertedIds zawiera tablicę identyfikatorów wstawionych wierszy.

Alternatywnym rozwiązaniem byłoby:

var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc.insertedIds[0];
});

Możesz pobrać dane bez użycia Node.js. Możesz użyć powłoki Mongodb. Z wiersza polecenia w systemie z systemem typu Mongo mongo aby dostać się do interaktywnej powłoki. Tam uruchom komendy Mongo:

> show dbs  //will list all databases
> use dbName  //will use database called dbName
> show collections  //will list all collections within the current database
> db.col.find({test: "yes"});  //will retrieve document from collection named col where "test" = "yes"

Cały działający plik JavaScript:

var mongodb = require("mongodb").MongoClient;

mongodb.connect("mongodb://localhost:27017/testDb", function(err, db){
var collection = db.collection("collec");
collection.insert({"test": "yes"}, function(err, results){
console.log(results.ops[0]._id);
db.close();
});
});

Można to wykorzystać do zapytania przez _id bezpośrednio.

var mongodb = require("mongodb").MongoClient;
var ObjectId = require("mongodb").ObjectID;

mongodb.connect("mongodb://localhost:27017/testDb", function(err, db){
var collection = db.collection("collec");
var id = ObjectId("583346693b3b904546ca175d");
collection.find({"_id": id}).toArray(function(err, results){
console.log(results);
db.close();
});
});