我必须在 mongodb 上执行查询,我想只选择一个具有特定 _id(类型 ObjectId)的文档。
我使用“严格模式”sintax,特别是运算符$oid用于将 _id 与字符串进行比较。
但它不起作用!,如果它是一个错误(一袋 mongo-c-driver/mongo-delphi-driver)或者我编写了错误的代码以对 ObjectId 字段进行查询,我现在不知道。
在一个简单的代码片段下面,具有该 _id 的文档存在,但 bson 文档为 nil
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/
我也尝试使用这两种方法...
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;