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