当前位置: 首页 > 知识库问答 >
问题:

Perl Mongo查找对象Id

蔺沛
2023-03-14

你会认为这是一件简单的事情。我有一个在我的集合中的对象ID列表。我想根据对象ID获得一条记录。谷歌过,但没有任何帮助。

所以我有对象id:5106c7703abc120a04070b34

my $client = MongoDB::MongoClient->new;
my $db = $client->get_database( 'myDatabase' );

my $id_find = $db->get_collection('mycollection')->find({},{_id =>      MongoDB::OID->new(value => "5106c7703abc120a04070b34")});

print Dumper $id_find;

此打印:

$VAR1 = bless( {
                 '_skip' => 0,
                 '_ns' => 'MindCrowd_test.Users',
                 '_grrrr' => 0,
                 'partial' => 0,
                 '_query' => {},
                 '_tailable' => 0,
                 '_client' => bless( {
                                       'w' => 1,
                                       'query_timeout' => 30000,
                                       'find_master' => 0,
                                       '_servers' => {},
                                       'sasl' => 0,
                                       'wtimeout' => 1000,
                                       'j' => 0,
                                       'timeout' => 20000,
                                       'sasl_mechanism' => 'GSSAPI',
                                       'auto_connect' => 1,
                                       'auto_reconnect' => 1,
                                       'db_name' => 'admin',
                                       'ssl' => 0,
                                       'ts' => 0,
                                       'inflate_dbrefs' => 1,
                                       'port' => 27017,
                                       'host' => 'mongodb://localhost:27017',
                                       'dt_type' => 'DateTime',
                                       'max_bson_size' => 16777216
                                     }, 'MongoDB::MongoClient' ),
                 '_limit' => 0,
                 'slave_okay' => 0,
                 '_request_id' => 0,
                 'immortal' => 0,
                 'started_iterating' => 0
               }, 'MongoDB::Cursor' );

我试过上述发现的不同版本。它们都无法编译:

$mongo->my_db->my_collection(find({_id => "ObjectId(4d2a0fae9e0a3b4b32f70000"}));

$mongo->my_db->my_collection(

查找({_id=

它们都不起作用。如何使用对象id查找(findone)单个记录??

共有2个答案

郑伟彦
2023-03-14

对此的答案已经改变了。MongoDB::OID已被弃用,取而代之的是BSON::OID,它没有允许您传入现有的24字节十六进制字符串的方法。以下是这些天你必须做的事情:

my $id = "5c7463277fc2198b64654feb";
my $oid = BSON::OID->new(oid => pack('H24', $id));
my $result = $db->get_collection('mycollection')->find_id($oid);

从$id中的24字节十六进制数据创建一个12字节的二进制序列。这是BSON::OID所期望的,然后perl驱动程序在后台为您构建正确的过滤器。

邓仲卿
2023-03-14

find方法返回一个游标对象以进行迭代。如果只需要一条记录,请使用返回值的find\u one方法。

my $client = MongoDB::MongoClient->new;
my $db = $client->get_database( 'myDatabase' );

my $id_find = $db->get_collection('mycollection')->find_one({_id => MongoDB::OID->new(value => "5106c7703abc120a04070b34")});

print Dumper $id_find;
 类似资料:
  • 问题内容: 我有一个数组: 我无法更改数组的结构。我正在传递ID为,我想获取数组中的该对象。 如何在JavaScript或jQuery中做到这一点? 问题答案: 使用方法: 从MDN: 如果数组中的元素满足提供的测试功能,则该方法返回数组中的第一个值。否则返回。 如果要查找其 索引 ,请使用: 从MDN: 该方法返回满足提供的测试功能的数组中第一个元素的索引。否则返回-1。 如果要获取匹配元素的数

  • 问题内容: 可以说我有一堂课 我将一些数据对象添加到ArrayList中: 为什么indexOf找不到这个?: indexOf是否比我自己遍历整个数组列表更好?还是我错过了一些东西。 问题答案: 该方法 不 经过整个列表。这是Java 7源代码的摘录: 让Java通过它比自己编写它更好。只要确保您的方法足以找到所需的对象即可。您还需要覆盖。 我不会写出您的方法,但是我建议您至少: 检查是否为空 测

  • 问题内容: 有没有办法确定序列化Java对象的生成? 问题是我序列化了一个对象而没有明确指定。现在,反序列化过程抱怨类不兼容。但是,我并没有以使其不兼容的方式更改类。因此,我假设在类中指定足够了,因为它存储在对象数据中。为此,我需要从序列化数据中读取。 问题答案: 您可以通过扩展ObjectInputStream来做到这一点: 我相信可以通过替换方法返回的描述符来读取所有序列化的数据,但是我还没有

  • 用命令findobj可以通过搜索带特定属性值的对象得到图形对象的句柄。用findobj,可以指定任何属性组合的值,这样要从多个对象选出一个就变的容易。例如,可能需要找出带有正方标记蓝色外观的蓝线。 也可以指定搜索哪个图形或轴。以下各节提供示例阐述如何用findobj命令。 查找所有某类型的对象 由于所有对象都具有一个用来辨别类型的类型属性,你可以查找所有某特定类型对象事件的句柄。例如, h = f

  • 我有一个LOCATION实体,它包含国家、州和城市。并且我有一个LocationRepository接口定义为: 我想按国家找到所有的州。我可以遵循方法名称标准来查询位置实体的所有内容。如果我想要列表,我需要创建StateRepository接口并在其中查询关于状态的一切吗?如果我可以从LocationRepository中获取它,那么方法是什么样子的?我假设它看起来会像下面这样(当然不起作用)。

  • 我用的是Spring。我有一个用户表。 当一个人登录系统时,他会向我发送他的凭证(即用户名和密码)。 我用增量生成的uid(即userid是主键)将我的用户存储在数据库中。 我还在数据库中存储了用户名、密码等信息。我需要做的是,当用户连接到Rest连接时,我需要检查数据库是否有这个用户。如果他存在,那么我需要检查密码是否匹配。我需要通过用户名而不是uid进行检查 我的程序中根本没有会话或任何东西(