使用MongoDB聚合$ sample操作获取错误。 - MongoError:$ sample stage找不到非重复文档

时间:2016-10-28 11:09:12

标签: mongodb mongoose

MongoError: $sample stage could not find a non-duplicate document after 100 while using a random cursor. This is likely a sporadic failure, please try again.

使用MongoDB版本3.2.8并刚刚升级到3.2.10。

我正在关注the example set forth by the MongoDB documentation.。文档很少。我能找到的唯一一个搜索是bug in an issue queue,它不能解决我的问题。

我的实施非常简单。

function createBattle(done) {
    // Need to make sure that the yachts are different.
    async.doWhilst(
        function(callback) {
            Yacht.aggregate(
                {
                    $sample: { size: 2 }
                },
                function (err, results) {
                    console.log(err.toString());
                    if (err) return callback(err);
                    callback(null, results);
                }
            )
        },
        function(results) {
            return results.length !== 2 || _.isEqual(results[0]._id, results[1]._id);
        },
        function(err, results) {
            if (err) return done(err);
            done(null, results);
        }
    )
}

我不确定发生了什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我正在使用猫鼬。它正在开发中。我的猜测是,当我更改文档的架构时发生了一些事情。在创建100000个伪造文档或仅创建10个文档后,它可以与测试模拟数据一起使用。所以我决定在数据库的开发实例上重新开始收集。无论如何,我将集合导出到一个干净的JSON文件中。我删除了数据库中的集合。然后我导入了JSON转储。它工作正常。

这是一个错误。

对于我来说,这可能是MongoDB的最后一根稻草。我可能会回到SQL,使用Redis,然后尝试PostGRES。