gpt4 book ai didi

MongoDB/珀尔 : find_one doesn't return data after unrelated code

转载 作者:可可西里 更新时间:2023-11-01 10:01:36 24 4
gpt4 key购买 nike

mongodb 是 v4.0.5

Perl 是 5.26.3

MongoDB Perl 驱动程序是 2.0.3

这个 Data::Dumper 输出显示是什么让我发疯

INFO - $VAR1 = [
'275369249826930689 1',
{
'conf' => {
'param' => 'argument'
},
'id' => '275369249826930689',
'lastmsg' => '604195211232139552',
'_id' => bless( {
'oid' => ']:\',&�h�GeR'
}, 'BSON::OID' )
}
];

352832438449209345 275369249826930689
INFO - $VAR1 = [
'275369249826930689 2'
];

第二个 INFO - $VAR1 应该显示与第一个相同的内容。这是原始代码,我已将其(见下文)分解以找出罪魁祸首。

    ddump(["$userid 1",
$c_identities->find_one({
channel => 'chan1',
id => $userid,
})
]);
my @filtered = reverse
grep { $_->{author}->{id} == $userid } @{$answers};

ddump(["$userid 2",
$c_identities->find_one({
channel => 'chan1',
id => $userid,
})
]);

ddump 只是 Data::Dumper 的包装器。如果我删除“my @filtered”行,第二个查找将再次返回预期结果(一个 MongoDB 文档)。 $answers 只是哈希表的列表引用 - 没有对象 - 来自某些 API,与 MongoDB 完全无关。

所以我分解了“反向 grep”代码,看看罪魁祸首在哪里。说的是你在上面的倾销者之间看到的两个数字。这是我能做的,从第二个 find_one 得到答案:

    for my $answer (@{$answers}) {
say $answer->{author}->{id}, ' ', $userid;
push @filtered, $answer;
}

只要我这样做,第二个 find_one 就会提供结果。但是,如果我这样做:

    for my $answer (@{$answers}) {
say $answer->{author}->{id}, ' ', $userid;
if ($answer->{author}->{id} == $userid) {
}
push @filtered, $answer;
}

我从上面得到输出(其中第二个转储程序没有从 find_one 返回。这太疯狂了 - 包含数字 eq 的 if 子句导致第二个 find_one 失败!这也是预期代码中的 grep 主体。

这是怎么回事?这对 MongoDB 方法有何影响?

最佳答案

使用数字比较运算符 == 将值数值化,但它可能太大而无法放入整数并变成 float 。当序列化为 JSON 或类似格式时,它也可以只是变成一个整数并丢失双引号。使用 eq 而不是 == 保持值不变。

关于MongoDB/珀尔 : find_one doesn't return data after unrelated code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57214778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com