Javascript MongoDB通过查找查询随机选择5个文档
我需要使用find函数从mongoDB中随机查找5个文档。我使用loopback4框架。我已经尝试使用示例(它在评论中)Javascript MongoDB通过查找查询随机选择5个文档,javascript,node.js,mongodb,loopback,loopback4,Javascript,Node.js,Mongodb,Loopback,Loopback4,我需要使用find函数从mongoDB中随机查找5个文档。我使用loopback4框架。我已经尝试使用示例(它在评论中) const userParties:IndividualParty[]=(等待查找)( 这个.logger, { 其中:{ 以及:[ {{u id:{nin:ids.map(id=>id)}, {性别:{inq:gender}}, ], }, //样本:{size:5}, //限额:5, }作为过滤器, 这是我的第二份报告, ))作为单独一方[]; 我不熟悉环回,但使用纯节点
const userParties:IndividualParty[]=(等待查找)(
这个.logger,
{
其中:{
以及:[
{{u id:{nin:ids.map(id=>id)},
{性别:{inq:gender}},
],
},
//样本:{size:5},
//限额:5,
}作为过滤器,
这是我的第二份报告,
))作为单独一方[];
我不熟悉环回,但使用纯节点和节点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的\u id
的集合中,这将随机输出5个\u id
大于50的文档。示例输出:
[ { _id: 60 }, { _id: 77 }, { _id: 84 }, { _id: 96 }, { _id: 63 } ]
您需要使上面的示例与环回一起工作,但基本思想就在这里
注意:
您需要而不是find()
通读注释,尤其是其:
$sample使用两种方法之一获取N个随机文档,具体取决于集合的大小、N的大小以及$sample在管道中的位置
$sample
在管道中的位置很重要。如果需要通过$match
阶段选择集合的子集进行$sample
操作(如上示例),则需要确保要采样的子集在16MB以内(内存排序中MongoDB的限制)。我不熟悉环回,但使用纯节点和节点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的\u id
的集合中,这将随机输出5个\u id
大于50的文档。示例输出:
[ { _id: 60 }, { _id: 77 }, { _id: 84 }, { _id: 96 }, { _id: 63 } ]
您需要使上面的示例与环回一起工作,但基本思想就在这里
注意:
您需要而不是find()
通读注释,尤其是其:
$sample使用两种方法之一获取N个随机文档,具体取决于集合的大小、N的大小以及$sample在管道中的位置
$sample
在管道中的位置很重要。如果您需要通过$match
阶段选择集合的子集进行$sample
操作(如上例),那么您需要确保要采样的子集在16MB以内(MongoDB内存排序的限制)。zi这就是您想要的吗?我用sample尝试过,但当我将其添加到查询中时(您可以在代码中看到它),它忽略了它。这就是您要查找的?我使用示例进行了尝试,但当我将其添加到查询中时(您可以在代码中看到),它忽略了它。