例如,我有一个具有以下结构的集合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个查询?凯特或约翰(重复的名字)应该是随机的,但不应重复。
答案 0 :(得分:1)
我认为您正在寻找的是 self.automaticallyAdjustsScrollViewInsets = False
聚合器,它将为您提供该集合的独特价值。它可以用作:
$group
MongoDB文档: Retrieve Distinct Values
答案 1 :(得分:1)
你去了 - 看看代码中的注释,以进一步解释这些阶段的作用:
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
}
}
])
与aggrgation框架一样,您可以运行添加了更多或更少阶段的查询,以便逐步查看转换。