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())
这似乎是 AnuragSharma 提到的来自 Azure Cosmo DB 的错误。
通过使用集合计数和 Math.random 管理手动解决方法。
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())
这似乎是 AnuragSharma 提到的来自 Azure Cosmo DB 的错误。
通过使用集合计数和 Math.random 管理手动解决方法。