0
我必須對mongodb執行一個查詢,我想只選擇一個具有特定_id(類型爲ObjectId)的文檔。
我使用「嚴格模式」sintax,特別是運算符$ oid用於比較_id與字符串。
但它不起作用!,如果它是一個錯誤(一包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/
我也嘗試用這個兩個方法...
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
and
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;
感謝答案,我用的比較操作符,如$ EQ或$ GT(其他領域),以及工作!問題出在ObjectId類型爲 –
的字段上有所不同。查詢不是它們自己的bson類型,它們只是作爲字符串發送。 –
添加回復您的編輯 –