mongodb ::光标对象返回perl中的重复记录


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;

解释给了我

$VAR1 = {
          'nscannedObjectsAllPlans' => 45824,
          'n' => 33459,

和$ num返回相同。

我正在尝试访问像这样的记录

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

它给了我重复的记录,而循环运行的记录数量超过说明。

我的方式有什么错吗?知道为什么它给出重复的记录?

谢谢raj

样本记录:

> 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" : [ ]
}
> 

在我想到 parent_id字段并可能包含一个dbref对象时,没有听到我的任何响应后。默认情况下,Perl MongoDB驱动程序扩展了这些引用,并从数据库中获取文档。这就是为什么您正在看到更多文档正在拔出的原因,并且可能没有帮助您的数据中有循环参考。

通过禁用行为来更改对Mongoclient的呼叫以解决此问题。

my $dbClient = MongoDB::MongoClient->new( inflate_dbref => 0 );

给自己一张笔记以提高jira默认情况下关闭它,并在此处将其关闭,以防某些 dos 遇到问题,因此对他们有帮助。p>所以现在我们有了一些示例数据,我们可以对此进行不同的看法。

如果您在收藏中包含示例文档,那么在这里查看的各个人来说,这将是非常清楚的。问您的问题时要牢记的好点。

您提到的行为可能是由某种形式的递归引起的,如上所述。由于这是不是有错的驱动程序,因此我们正在寻找您的代码来查看问题。

已发布的代码没有错,但是在迭代光标

时,它显着落在循环中所做的事情

考虑到您的初始查询正在寻找具有parent_id的文档的合理扣除额,是您打算在循环中使用该parent_id做点事。另外,您的示例数据特别表明_idparent_id实际上都是相同的。

因此,如果您有任何代码遵循parent_id,那么毫无疑问,您为什么看到自己是结果。

最新更新