Python mongodb随机样本奇怪行为

Python mongodb随机样本奇怪行为,python,mongodb,random,Python,Mongodb,Random,我正在使用: mongodb server 3.47 windows 10 64-bit python 3.62 64-bit pymongo 3.50 “dict”数据库中的“k”集合中有两条记录: {"text": "xdcdcdcd", "sent": "false"} {"text": "vvrvrrrv", "sent": "true"} 我想选择一个“发送”等于false的随机记录: from pymongo import MongoClient client = MongoCl

我正在使用:

mongodb server 3.47
windows 10 64-bit
python 3.62 64-bit
pymongo 3.50
“dict”数据库中的“k”集合中有两条记录:

{"text": "xdcdcdcd", "sent": "false"}
{"text": "vvrvrrrv", "sent": "true"}
我想选择一个“发送”等于false的随机记录:

from pymongo import MongoClient
client = MongoClient()
db = client.dict
k = db.k
item = list(k.aggregate([{"$sample": {"size": 1}}, {"$match": {"sent": False}}]))
变量项应该是“[{u id”:“…”,“text”:“xdcdcdcd”,“sent”:“false”}]”,但我试了好几次,有时效果很好,但有时返回[]。

是一个管道操作。这意味着它将逐个应用您的聚合列表

在您的示例中,它执行两个步骤(列表中有两个元素):

第一步你只得到一个数据(
size=1
),它要么是
{“text”:“xdcddcd”,“sent”:“false”}
要么是
{“text”:“vvrvrrv”,“sent”:“true”}

然后在第二步中应用
“$match”
,您将获得50%的
[]
(当您在第一步中获得
{“text”:“vvrvrrv”,“sent”:“true”}

因此,如果您设置
{“size”:1}
,您将始终得到您期望的结果

但是实际上,
{“$sample”:{“size”:1}
是无用的,只需删除它。

是一个管道操作。这意味着它将逐个应用您的聚合列表

在您的示例中,它执行两个步骤(列表中有两个元素):

第一步你只得到一个数据(
size=1
),它要么是
{“text”:“xdcddcd”,“sent”:“false”}
要么是
{“text”:“vvrvrrv”,“sent”:“true”}

然后在第二步中应用
“$match”
,您将获得50%的
[]
(当您在第一步中获得
{“text”:“vvrvrrv”,“sent”:“true”}

因此,如果您设置
{“size”:1}
,您将始终得到您期望的结果

但是实际上,
{“$sample”:{“size”:1}}
是无用的,只需删除它即可

1. {"$sample": {"size": 1}}
2. {"$match": {"sent": False}}