这个问题是this one的后续问题,我认为提出一个新问题比发表评论和necropost更好。
(TL; DR他们提供了一个解决方案,以便在插入集合时获取_id)
我尝试使用.js bash脚本或在控制台中尝试似乎无法做到:
var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc[0]._id;
});
变量不会改变。在控制台中,命令返回WriteResult({ "nInserted" : 1 })
但最新仍然无效,并且在js中它具有与之前相同的值。
有没有办法在没有Node.js的情况下获取id?我应该切换到Node.js吗?
我的bash脚本实际上只是mongo --eval '<my whole javascript>'
答案 0 :(得分:1)
你的表达中缺少一个部分。
var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc.ops[0]._id;
});
newDoc
包含来自mongo的完整回复。
newDoc.ops
包含插入行的数组。
newDoc.insertedIds
包含插入行的ID数组。
另一种解决方案是:
var latest;
db.collec.insert({test:"yes"},function(err,newDoc){
latest = newDoc.insertedIds[0];
});
您可以在不使用Node.js的情况下获取数据。您可以使用Mongodb shell。从运行Mongo类型mongo
的系统上的命令提示符转到交互式shell。在那里,运行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'
整个有效的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();
});
});
这可以直接用_id
查询。
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();
});
});