16

私は node.js と mongodb を使用しています。次を使用して、mongo が生成した ID に基づいてデータベースにクエリを実行しようとしています。

    collection.findOne( {_id:doc._id} , function(err, item) {});

doc._id が、コレクションで探している doc _id と完全に一致していることは 100% 確信していますが、db クエリから null 応答が返されます。

ドキュメント内の他のキーを使用してこれを試してみましたが、ドキュメントは問題なく返されます。mongo IDを使おうとしたときだけです。

4

5 に答える 5

17

MongoDbは、文字列ではなくオブジェクトです。私が使用した文字列を変換するには:

    var id = require('mongodb').ObjectID(doc._id);

これにより、文字列がmongo ObjectIdに変換され、dbの_idと一致します。

于 2012-10-07T14:09:30.183 に答える
10

以下は、問題を特定する例です。

var mongo = require('mongodb'),
    Server = mongo.Server,
    Db = mongo.Db,
    ObjectID = require('mongodb').ObjectID;
var MongoClient = require('mongodb').MongoClient

//let id = your _id, smth like '6dg27sh2sdhsdhs72hsdfs2sfs'...
var obj_id = new ObjectID('52cbd028e9f43a090ca0c1af');
var justId = '52cbd028e9f43a090ca0c1af'; // <== This will not work

MongoClient.connect('mongodb://127.0.0.1:27017/YourDbName', function(err, db) {
    console.log('err'  +  err);
    db.collection('YourCollectionName', function(error, collection) {
        //collection.find({_id:justId}),function(err, docs) { // <== This will not work
        collection.findOne({_id:obj_id},function(err, docs) {
          console.log("Printing docs from Array. count " + JSON.stringify(docs)); 
        });
  });
});
于 2014-04-07T09:27:40.743 に答える
2

まず、MongoDB 構成に必要なすべてのモジュールを追加したことを確認します。

var mongo = require('mongodb'),
    Server = mongo.Server,
    Db = mongo.Db,
    ObjectID = require('mongodb').ObjectID;
var BSON = require('mongodb').BSONPure;
var server = new Server('localhost', 27017, {
    auto_reconnect: true
});
var db = new Db('YOUR_DB_NAME', server);

次に、_id でコレクション内のオブジェクトを見つけようとするときは、次を使用します。

//let id = your _id, smth like '6dg27sh2sdhsdhs72hsdfs2sfs'...
var obj_id = BSON.ObjectID.createFromHexString(id);
db.collection("NAME_OF_COLLECTION_WHERE_IS_YOUR_OBJECT", function(error, collection) {
    collection.findOne( {_id:obj_id} , function(err, item) {
        // console.log ( item.username );
    });
});

うまくいけば、これはうまくいきます。

于 2012-10-07T16:02:46.403 に答える