web-dev-qa-db-ja.com

node.jsアプリのMongoIDに基づいてMongoDBをクエリする

Node.jsとmongodbを使用しており、以下を使用して、mongoで生成されたIDに基づいてデータベースにクエリを実行しようとしています。

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

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

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

15
user699242

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

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

これにより、文字列がmongo ObjectIdに変換され、データベース内の_idと一致します。

14
user699242

これを使って:

ObjectId = require('mongodb').ObjectID;

次に、_idによってコレクション内のオブジェクトを検索しようとする場合は、次を使用します。

 console.log("find by: "+ id);
 database.collection("userRegister").findOne({_id: new ObjectId(id)}, 
   function(err, res) { 

     if (err) console.log(err);

     if(res!=null){
       console.log(res)
       return false;
     }

     if(res==null){
       callback({'status':_error,'flag':'notexist','message':_userNotExist});
       return false;
     }

   });
14
Krishan Kumar

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

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)); 
        });
  });
});
9
Amol M Kulkarni

まず、ObjectIDライブラリからmongodbを取得し、次の方法で新しいインスタンスを作成する必要があります。これにより、文字列のObjectIDを取得できます。コードでes6を使用している場合、このコード

import { ObjectID } from 'mongodb';

var emQuery = [
          {
            $match: {
              _id: new ObjectID(tlvaltResult[0].customers.createdBy)
            }
          },
          {
            $project: {
              _id:1,
              emailId:1,
              mobile:1
            }
          }
        ];

console.log(emQuery,'emQuery');

[ { '$match': { _id: 5ad83ff0b443435298741d3b } },
  { '$project': { _id: 1, emailId: 1, mobile: 1 } } ] 

var emResult = await User.getAggregation(emQuery);

console.log(emResult,'emResult');

[ { _id: 5ad83ff0b443435298741d3b,
    emailId: '[email protected]' } ]
3
KARTHIKEYAN.A

まず、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 );
    });
});

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

1
f1nn