$sample aggregate for Azure CosmoDB + Azure函数没有返回预期的随机结果.<



Azure函数:

module.exports = async function (context, req) {
await client.connect();
const database = client.db("crud");
const collection = database.collection("moments");
let obj = await collection.aggregate([{$sample:{ size: 3 }}]).toArray();
if (!obj) {
return context.res = {
status: 400,
body: "not found"
};
}
return context.res = {
status: 200, /* Defaults to 200 */
body: obj
};
}

我每次都从db.collection获得相同的记录(前3)。

如果查询没有toArray()方法,返回:


{
"_events": {},
"_eventsCount": 0
}

我似乎找不到原因。

$sample仍然不能像预期的那样与Azure Cosmos DB MongoDB API一起工作,应该在不久的将来修复,但是我们可以使用下面的东西来获得文档的随机列表:

db.collection.find().limit(3).skip(Math.random()*db.collection.count())

在MongoDB中查找随机文档

好像是AnuragSharma提到的Azure Cosmo DB的bug。

通过使用集合count和Math.random.

管理手动解决方案

最新更新