Javascript nodejsmongoose流是不准确的,给出的结果远远超过实际存在的结果

Javascript nodejsmongoose流是不准确的,给出的结果远远超过实际存在的结果,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个1011个字符串的数组 我正在尝试在猫鼬中创建一个流 像这样: var cursor = Domain.find({ domain: { $in: list } }).stream(); 没什么特别的。我可以验证列表大小是否为1011个结果。我还可以进入mongodbshell并执行db.domains.find({domain:{$in:[粘贴在这里的大列表中]}).count()我得到了1011 然而,在流中,

我有一个1011个字符串的数组

我正在尝试在猫鼬中创建一个流

像这样:

    var cursor = Domain.find({
        domain: {
            $in: list
        }
    }).stream();
没什么特别的。我可以验证列表大小是否为1011个结果。我还可以进入
mongodbshell
并执行
db.domains.find({domain:{$in:[粘贴在这里的大列表中]}).count()我得到了
1011

然而,在流中,我得到的结果比(a)我应该得到的结果和(b)存在于我的数据库中的结果多出数百个

我设置的一个简单测试如下:

    var tempo = 0;
    var cursor = Domain.find({
        domain: {
            $in: list
        }
    }).stream();

    cursor.on('data', function(rec) {
        tempo++;
        console.log(tempo);
    });
如果我运行这个,我会在终端上记录1529个结果


非常混乱。这里发生了什么事?

我可以建议在这里进行进一步的测试吗。既然
list
是一个数组,那么可能会执行
if(list.indexOf(rec.domain)!=-1){tempo++;}else{miscount++;}
,这将证明您在
$in
条件下确实得到了未指定的结果。但我怀疑这种情况是否会发生,因为我认为这纯粹是对您在测试查询中提交的内容与您的实时代码运行时实际提交的内容的误解。在
条件下,
$in不可能找到列表中未指定的内容。所以其他未列出的代码就是这里的错误。@BlakesSeven我正在控制台上记录光标开始之前的
list
,然后将其放入MongoDB Shell并返回一个计数。伯爵说是1011。似乎正在发生的是,一些记录被多次拉出…使用我告诉过你的代码。那将提供你所说的是真的唯一证据。您不可能在代码中运行与在shell中相同的东西并返回不同的结果计数。我看不出为什么域应该是唯一的,因此可以多次匹配。你得到不同结果的唯一方法是因为你做了不同的事情。@BlakesSeven好吧,你建议的代码是测试域名是否在列表中-我不是在反驳,我是说流正在提取重复项。在实时代码中有很多暂停和恢复光标的操作,这可能会产生一个错误流并产生重复的结果吗。你还没有发现驱动程序中有错误。这里唯一的bug就是你自己的代码。如果你认为你得到了错误的结果,那么举证责任就在你身上。如果你能在这里展示一个可复制的案例,其他人也可以用它来展示两种情况下返回的结果是不同的,那么人们会(我会)研究它。在此之前,您需要仔细查看您的代码实际上在做什么,因为您肯定没有做相同的事情。事实上,我的第一个赌注是你实际上有两个收藏。