Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中返回重复记录的游标对象_Perl_Mongodb - Fatal编程技术网

在perl中返回重复记录的游标对象

在perl中返回重复记录的游标对象,perl,mongodb,Perl,Mongodb,这个解释给了我很大的帮助 use MongoDB; my $dbClient = MongoDB::MongoClient->new(); my $db = $dbClient->get_database( 'exp_new' ); my $rsvnCollection = $db->get_collection( 'reservations' ); my $rsvnDB = $rsvnCollection->find({parent_id => {'$exists

这个解释给了我很大的帮助

use MongoDB;
my $dbClient = MongoDB::MongoClient->new();
my $db = $dbClient->get_database( 'exp_new' );
my $rsvnCollection = $db->get_collection( 'reservations' );
my $rsvnDB = $rsvnCollection->find({parent_id => {'$exists' => 1}});
my $explanation = $rsvnDB->explain;
my $num = $rsvnDB->count;
$num返回相同的值

我正试图访问这样的记录

$VAR1 = {
          'nscannedObjectsAllPlans' => 45824,
          'n' => 33459,
它给了我重复的记录,而循环运行的记录数超过了解释中返回的记录数

我这样做有什么不对吗?你知道为什么会有重复记录吗

谢谢 拉吉

样本记录:

while (my $record = $rsvnDB->next) {

在没有听到我的任何回应后,我想
parent\u id
字段以及可能更多的字段都包含一个对象。默认情况下,使用Perl MongoDB驱动程序并从数据库中获取文档。这就是为什么您会看到越来越多的文档被提取,而您的数据中可能包含循环引用,这可能对您没有帮助

更改对MongoClient的调用,通过禁用该行为来修复此问题

> db.reservations.findOne({parent_id: {$exists : 1}})
{
    "_id" : 428,
    "created_user" : "george",
    "status" : NumberLong(2),
    "topologies" : [ ],
    "parent_id" : 428,
    "end_time" : ISODate("2012-08-25T01:45:00Z"),
    "reserved_ports" : {
        "bangalore" : [
            "eth 12/1",
            "eth 12/10",
        ]
    },
    "repeatInfo" : {
        "recurrEndType" : "Occurrences",
        "recurrType" : "Daily",
        "recurrValue" : NumberLong(9)
    },
    "created_time" : ISODate("2012-08-24T00:16:34Z"),
    "name" : "George",
    "start_time" : ISODate("2012-08-24T16:20:01Z"),
    "deleted" : "0",
    "task" : "ACTIVATION",
    "modified" : "0",
    "devices" : [
        "bangalore"
    ],
    "updated_time" : ISODate("2012-08-30T01:44:55Z"),
    "ports" : [ ],
    "updated_user" : "George",
    "reserved_devices" : [
        "bangalore"
    ],
    "topology_details" : [ ]
}
> 
给自己一个提示,让JIRA在默认情况下关闭此功能,并将其保留在此处,以防一些遇到此问题,这样可以对他们有所帮助

现在我们有了一些样本数据,我们可以从不同的角度来看待这个问题

如果您在收藏中包含了一个示例文档,那么在这里查看的各种人都会非常清楚这一点。问问题时要记住一点

您提到的行为可能是由上面提到的某种形式的递归引起的。由于这是而不是出故障的驱动程序,我们正在查看您的代码以了解问题所在

所发布的代码没有任何问题,但它明显没有达到迭代光标时在循环中所做的工作

考虑到您最初的查询是在寻找一个具有
父id
的文档,一个合理的推论是您打算对循环中的
父id
执行一些操作。另外,您的示例数据还特别显示了
\u id
父id
实际上是相同的


因此,如果您有任何代码遵循此
parent\u id
,那么这无疑是您看到结果的原因。

您的文档是什么样子的。您可以通过显示集合中的一些示例文档进行编辑。还可以尝试从mongo shell进行比较。但是你所做的很简单。我已经用样本记录更新了这个问题。让您知道没有DBRef对象。我试过你的建议,但对我没有帮助。记录中没有循环引用。唯一的解释是数据以某种方式被递归。你在循环光标的时候到底在做什么?@Raj你真的需要看看这些编辑现在看来很清楚到底发生了什么……这触发了我的解决方案。Neil我想你是在写,我更改了文档并写回DB,cursor再次将其拾取并显示给我,好像有一条记录。谢谢,我在while循环中更改了代码。我想我应该删除这篇文章,这是一个简单的perl编码问题。你觉得尼尔怎么样?
my $dbClient = MongoDB::MongoClient->new( inflate_dbref => 0 );