Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB通过查找查询随机选择5个文档_Javascript_Node.js_Mongodb_Loopback_Loopback4 - Fatal编程技术网

Javascript MongoDB通过查找查询随机选择5个文档

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, }作为过滤器, 这是我的第二份报告, ))作为单独一方[]; 我不熟悉环回,但使用纯节点

我需要使用find函数从mongoDB中随机查找5个文档。我使用loopback4框架。我已经尝试使用示例(它在评论中)

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尝试过,但当我将其添加到查询中时(您可以在代码中看到它),它忽略了它。这就是您要查找的?我使用示例进行了尝试,但当我将其添加到查询中时(您可以在代码中看到),它忽略了它。