gpt4 book ai didi

javascript - 是否可以在集合中找到没有相同字段的随机文档? (monogdb\node.js)

转载 作者:行者123 更新时间:2023-12-01 03:11:35 24 4
gpt4 key购买 nike

例如,我有一个具有以下结构的集合users:

{
_id: 1,
name: "John",
from: "Amsterdam"
},
{
_id: 2,
name: "John",
from: "Boston"
},
{
_id: 3,
name: "Mia",
from: "Paris"
},
{
_id: 4,
name: "Kate",
from: "London"
},
{
_id: 5,
name: "Kate",
from: "Moscow"
}

如何随机获得3个名字不重复的文档?

使用函数 getFourNumbers(1, 5),我得到包含 3 个不重复数字的数组并按 _id 进行搜索

var random_nums = getThreeNumbersnumbers(1, 5); // [2,3,1]
users.find({_id: {$in: random_nums}, function (err, data) {...} //[John, Mia, John]

但它可以由两个约翰或两个凯特组成,这是不受欢迎的行为。我如何获得三个随机文档( [John, Mia, Kate]。不是 [John, Kate, Kate][John, Mia, John]) 有 1 个或最多 2 个查询? Kate 或 John(重复的名字)应该是随机的,但不应重复。

最佳答案

就这样 - 请参阅代码中的注释以进一步说明各个阶段的作用:

users.aggregate(
[
{ // eliminate duplicates based on "name" field and keep track of first document of each group
$group: {
"_id": "$name",
"doc": { $first: "$$ROOT" }
}
},
{
// restore the original document structure
$replaceRoot: {
newRoot: "$doc"
}
},
{
// select 3 random documents from the result
$sample: {
size:3
}
}
])

与往常一样,使用聚合框架,您可以运行添加更多或更少阶段的查询,以便逐步查看转换。

关于javascript - 是否可以在集合中找到没有相同字段的随机文档? (monogdb\node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45802403/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com