mongodbでクエリを実行する必要があります。ドキュメントには特定の_id(ObjectIdタイプ)が選択されています。
私は "厳密モード" sintaxを使用します。特に、_idと文字列を比較する場合は、演算子$ oidを使用します。
しかし、それは動作しません!、私はバグ(mongo-c-driver/mongo-delphi-driverの袋)かObjectIdフィールドのクエリを作成するために間違ったコードを書く場合、私は今はしません。コードの簡単なスニペット以下mongo-delphi-driverで特定の_idを持つドキュメントを取得する
、その_idを持つ文書が存在するが、BSON文書が
var
b : TBson;
begin
b := mongo.findOne(ns,(BSON(['_id','{','$oid','58c6b6af9b2dcd04ae46844d','}'])));
if b = nil then
ShowMessage('No match')
else
ShowRecord(b);
end
https://docs.mongodb.com/manual/reference/mongodb-extended-json/
nilである私も、この二つの方法を試してください...
var
bb : TBsonBuffer;
query, b : TBson;
cursor : TMongoCursor;
begin
bb := TbsonBuffer.Create();
bb.startObject('_id');
bb.append('$oid', PAnsiChar('"58c6b6af9b2dcd04ae46844d"'));
bb.finishObject();
query := bb.finish();
b := mongo.findOne(ns, query);
if b = nil then
ShowMessage('No match')
else
ShowRecord(b);
end
および
var
bb : TBsonBuffer;
query, b : TBson;
id : TBsonOID;
begin
id := TBsonOID.Create('58c6b6af9b2dcd04ae46844d');
bb := TbsonBuffer.Create();
bb.startObject('_id');
bb.append('$oid', id);
bb.finishObject();
query := bb.finish();
b := mongo.findOne(ns, query);
if b = nil then
ShowMessage('No match')
else
ShowRecord(b);
end;
おかげで、私は$当量または$ GT(他のフィールド上)と、その作業のような比較演算子を使用します!問題は、異なるObjectIdタイプ –
のフィールドにあります。クエリは独自のbson型ではなく、単に文字列として送信されます。 –
編集に返信しました –