【问题标题】:MongoDB aggregate returns random results every time (PyMongo)MongoDB 聚合每次返回随机结果 (PyMongo)
【发布时间】:2020-12-14 08:14:11
【问题描述】:

我遇到了pymongo.aggregate 的奇怪行为。

我正在使用pymongo collection.aggregate() 来获得结果。即使是简单的请求,该命令每次都会返回新结果。

In [8]: print([i['_id'] for i in col.aggregate([
   ...:     {'$match': {'$text': {'$search': 'mark'}}},
   ...:     {'$limit':2}])])
['CA 990342008', 'TX 16854869']

In [9]: print([i['_id'] for i in col.aggregate([
   ...:     {'$match': {'$text': {'$search': 'mark'}}},
   ...:     {'$limit':2}])])
['TX 8210259', 'CA 993322075']

如果有人指出我在文档中遗漏的内容,我会很高兴。

【问题讨论】:

    标签: python mongodb pymongo


    【解决方案1】:

    与大多数数据库一样,除非请求特定顺序,否则返回文档的顺序是任意的。这样做是为了优化;只要内部引擎有 2 个匹配的文档(在您的示例中),就无需执行任何其他操作,因此您可能会看到不同的结果。

    在 MongoDB 中,您可以使用 .sort() 运算符请求特定订单,或者在您的示例中,使用 $sort 聚合管道阶段。

    【讨论】:

    • 我有 18M 条记录,sort 针对所有数据太昂贵了。感谢您的回答。
    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多