[英]MongoDB select random 5 documents via find query
我需要使用查找功能从mongoDB中随机查找5个文档。 我使用LoopBack 4框架。 我已经尝试使用示例(在评论中)
const userParties: IndividualParty[] = (await find(
this.logger,
{
where: {
and: [
{ _id: { nin: ids.map(id => id) } },
{ gender: { inq: gender } },
],
},
//sample: { size: 5 },
//limit: 5,
} as Filter<IndividualParty>,
this.partyRepository,
)) as IndividualParty[];
我不熟悉回送,但是使用纯节点和节点MongoDB驱动程序,这是我能想到的最短的示例:
var run = async function() {
const conn = await require('mongodb').MongoClient.connect('mongodb://localhost:27017', {useNewUrlParser: true})
let agg = [
{'$match': {'_id': {'$gte': 50}}},
{'$sample': {'size': 5}}
]
let res = await conn.db('test').collection('test').aggregate(agg).toArray()
console.log(res)
await conn.close()
}()
在包含从0到99的_id
的集合中,这将随机输出_id
大于50的5个文档。示例输出:
[ { _id: 60 }, { _id: 77 }, { _id: 84 }, { _id: 96 }, { _id: 63 } ]
您需要使上面的示例与Loopback一起使用,但是基本思想就在那里。
注意:
您需要聚合而不是find()
。
通读$ sample文档 ,特别注意其行为 :
$ sample使用两种方法之一来获取N个随机文档,具体取决于集合的大小,N的大小以及$ sample在管道中的位置。
$sample
在管道中的位置很重要。 如果您需要选择集合的一个子集以通过$match
阶段进行$sample
(如上例所示),则需要确保要采样的子集在16 MB以内(MongoDB在-内存排序)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.