Azure Cosmos DB + Azure 函数的 $sample 聚合未返回预期的随机结果

$sample aggregate for Azure CosmoDB + Azure functions not returning expected random result

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
        };
    }

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

如果不使用toArray()方法查询,returns:


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

我似乎找不到原因。

$sample 在 Azure Cosmos DB MongoDB API 中仍然无法按预期工作,应该会在不久的将来修复,但是我们可以使用类似下面的内容来获取随机文档列表:

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

Finding a random document in MongoDB

这似乎是 AnuragSharma 提到的来自 Azure Cosmo DB 的错误。

通过使用集合计数和 Math.random 管理手动解决方法。