问题很可能是由于CosmoDB分区键导致的。如果使用具有分区键的集合,$sample聚合操作可能会在同一分区中返回相同结果。要解决这个问题,可以使用无分区键的集合。若要使用带有分区键的集合,请将sample聚合操作与分区键组合使用,如以下示例代码所示:
module.exports = async function (context, req) {
const { MongoClient } = require('mongodb');
const [requiredEnv, databaseName] = ['MONGODB_CONNECTION_STR', 'your_database_name'];
const partitionKey = 'your_partition_key';
const collectionName = 'sample_collection';
const size = 3;
const client = new MongoClient(process.env[requiredEnv], { useNewUrlParser: true, useUnifiedTopology: true });
await client.connect();
const database = client.db(databaseName);
const collection = database.collection(collectionName);
const querySpec = {
'query': `SELECT TOP 1 * FROM Root r WHERE r.${partitionKey} = @partitionKey ORDER BY
r._ts DESC`,
'parameters': [
{
'name': '@partitionKey',
'value': 'your_partition_value'
}
]
};
const result = collection.aggregate([{ $match: { partitionKey: "your_partition_value" } }, { $sample: { size: size } }]);
context.res = {
body: result
};
};
在上面的代码示例中,sample操作与查询语句组合使用,以便在同一分区中返回随机结果。