13

文字列としてmongoドキュメントIDを持っている場合、それを_idとしてクエリするにはどうすればよいですか?

正しく機能します.find({_id:'stringID'})か、それとも最初にbsonオブジェクトに変換する必要がありますか?

4

3 に答える 3

29

ObjectIdの24桁の16進数文字列があるということですか?

それがあなたの言いたいことだと仮定すると、ほとんどのドライバーは文字列を取得してそれをObjectIdに変換する方法を持っています。JavaScriptでは次のようになります。

.find({_id:new ObjectId("4f91bfcfaa7c5687a0c686d4")})

ノードネイティブドライバーにとってもう少し便利になるように更新されました( https://github.com/christkv/node-mongodb-nativeのドキュメントから):

// Get the objectID type
var ObjectID = require('mongodb').ObjectID;

var idString = '4e4e1638c85e808431000003';
collection.findOne({_id: new ObjectID(idString)}, console.log)  // ok
collection.findOne({_id: idString}, console.log)  // wrong! callback gets undefined
于 2012-04-20T22:35:02.683 に答える
2

_id値が文字列の場合、他のフィールドと同じようにクエリを実行できます。(_idにカスタム値を設定する場合は、一意に保つ必要があります。そうしないと、重複キーエラーが発生します。)

MongoJSシェルの例を次に示します。

> db.test.insert({_id:"stringID1"})
> db.test.insert({_id:"stringID2"})
> db.test.insert({_id:"stringID3"})
> db.test.find({_id:"stringID1"})
{ "_id" : "stringID1" }
> 

これはあなたが探していたものですか?私はあなたの質問を誤解しなかったと思います!

于 2012-04-20T22:08:51.807 に答える
1

_idMongooseは、を使用すると文字列をObjectIdに自動キャストするため、文字列をfindByID使用してクエリを実行できます_id

req.bodyまた、APIから入力される入力req.paramsはすべて文字列型であるため、必要に応じてキャストを入力する必要があります...ただし、前述のように、マングースはそれを実行するため、入力_idされた文字列形式のままにしておくことができますなので。

于 2020-05-08T16:09:37.817 に答える