/ / Mongodb inserisce callback mai chiamato - javascript, node.js, mongodb

Mongodb inserisce la callback mai chiamata - javascript, node.js, mongodb

Questa domanda è un seguito di questo e ho pensato che fosse meglio porre una nuova domanda piuttosto che pubblicare un commento e necropost.

(TL; DR forniscono una soluzione per ottenere il _id quando viene inserita una raccolta)

Ho provato con uno script bash .js o in console non sembra funzionare:

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

La variabile non cambia. In console il comando ritorna WriteResult({ "nInserted" : 1 }) ma lastest è ancora nullo e in js ha lo stesso valore di prima.

C'è un modo per ottenere l'id senza Node.js? Devo passare a Node.js?


Il mio script bash è davvero giusto mongo --eval "<my whole javascript>"

risposte:

1 per risposta № 1

Ti manca un pezzo nella tua espressione.

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

newDoc contiene l'intera risposta di mongo.

newDoc.ops contiene un array delle righe inserite.

newDoc.insertedIds contiene una matrice degli ID delle righe inserite.

Una soluzione alternativa sarebbe:

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

Puoi ottenere i dati senza usare Node.js. Puoi usare la shell Mongodb. Dal prompt dei comandi sul sistema che esegue il tipo Mongo mongo per accedere alla shell interattiva. Una volta lì, esegui i comandi 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"

Intero file JavaScript funzionante:

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();
});
});

Questo può essere usato per interrogare dal _id direttamente.

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();
});
});