我必须在mongob上执行查询,我想只选择一个具有特定_id的文档(类型为ObjectId)。
我使用“严格模式”sintax,特别是运算符$oid用于将_id与字符串进行比较。
但是它不起作用!,我现在不知道它是一个错误(一袋mongo-c-drive/mongo-delphi-drive)还是我在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;
procedure TForm2.Button1Click(Sender: TObject);
var oCrs : IMongoCursor;
Aux : String;
begin
oCrs := FMongoConn['DataBase']['collections'].Find()
.Match
.BeginObject('_id')
.Add('$eq', TJsonOid.Create('5eab21d55c61623e44004b21'))
.EndObject
.&End;
While (oCrs.Next) do
begin
Aux := Aux + oCrs.Doc.AsJSON;
end;
if Trim(Aux) = '' then
Memo1.Text := '0'
else
Memo1.Text := Aux;
end;
Var FMongoConn : TMongoConnection;
begin
FMongoConn := TMongoConnection(Connection.CliObj);
Result := FMongoConn['DataBase'] ['collections'].Dereference(TJsonOid.Create('5EAB21D55C61623E44004B21')).AsJSON;
正如这里所说的,严格模式JSON接口仅用于HTTP API和命令行工具。驾驶员应使用适当的BSON。我认为您可以在Delphi中这样做:
b := mongo.findOne(ns(BSON(['_id',TBsonOID.Create('58c6b6af9b2dcd04ae46844d')])));
但我不是真正的德尔菲人。
编辑:您添加的TBsonOID
示例应该是这样的,我认为:
var
bb : TBsonBuffer;
query, b : TBson;
id : TBsonOID;
begin
id := TBsonOID.Create('58c6b6af9b2dcd04ae46844d');
bb := TbsonBuffer.Create();
// _id isnt a json object it is an oid.
bb.append('_id', id);
query := bb.finish();
b := mongo.findOne(ns, query);
if b = nil then
ShowMessage('No match')
else
ShowRecord(b);
end;
我正在尝试查找一个XPath查询以获取元素的祖先,它是一个,具有。 我做错了什么?
您好,我正在尝试从mongodb获取D-7天的文档 示例:如果今天是“星期三”,那么我只想获取上一个“星期三”的文档 我得到的日期从前端, 日期格式在mongob: 日期格式从邮递员:"2020-01-15"我在nodejs转换成dateObject.喜欢这个: 2020-01-15T00:00:00.000Z nodejs查询 邮递员。身体 POSTMAN响应返回空数组 Mongodb系列
问题内容: 我有一个推特ID列表,我想为其下载其文本内容。有什么简单的解决方案,最好是通过Python脚本来实现?我查看了Tweepy之类的其他库,但事情似乎并没有那么简单,并且由于我的清单很长,因此无法手动下载它们。 问题答案: 您可以使用API路由按其ID访问特定的推文。大多数Python Twitter库遵循完全相同的模式,或为这些方法提供“友好的”名称。 例如,Twython提供了几种方法
问题内容: 我正在尝试通过搜索“ _id”键在MongoDB中查找文档。我的文件看起来像这样- 我正在尝试将此文档搜索为- 但我得到以下错误- BasicDBObject的append方法支持(字符串键,值),如果我将“ _id”作为String传递给此方法,则不会匹配任何文档。 所以我的问题是如何传递“ _id”? 问题答案: 通过使用as作为查询来解决
问题内容: 我正在尝试使用JDBC驱动程序将android应用程序连接到服务器(PostgreSQL),但是出现此错误: 我尝试了很多事情,例如在路径中添加驱动程序的地址,但没有任何效果。我遵循了本教程:http : //appliedcoffeetechnology.tumblr.com/post/10657124340,并在构建路径中添加了驱动程序JDBC4(我也尝试过JDBC3)。 每个人都
我正在尝试插入一个新文档,其中_id字段在ReactiveMongo中指定。但是我所有的插入都是使用Mongo默认的增量对象ID执行的。有没有办法在插入过程中指定_id? 这是我的代码。