查询-在strict_id = 13546456566时不显示数据
假设我们有一个集合,并且其中的字段名称strict_id的值为13546456566,但我不想在restrict_id具有下一个值之前不显示任何数据,它将显示如何使此查询成为mongodb
{
"_id": ObjectID("5e9eb49efc81c83087396ff2"),
"group_id": ObjectID("5e4e755b380054797d9db627"),
"date": 1587459230192,
"text": "First"
}
{
"_id": ObjectID("5e9eb49efc81c83087396ff2"),
"group_id": ObjectID("5e4e755b380054797d9db627"),
"date": 1587459230192,
"text": "Second"
}
{
"_id": ObjectID("5e9eb49efc81c83087396ff2"),
"group_id": ObjectID("5e4e755b380054797d9db627"),
"restrict_id": "13546456566"
"date": 1587459230192,
"text": "Third"
}
{
"_id": ObjectID("5e9eb49efc81c83087396ff2"),
"group_id": ObjectID("5e4e755b380054797d9db627"),
"date": 1587459230192,
"text": "Fourth"
}
所以在这里我的Texture集合说您可以跳过认为相同的对象_id,其复制的对象是不同的,但问题是我想跳过所有的前三个,因为它具有标志strict_id = 13546456566仅用于显示第四个文本值在mongodb中如何显示
答案 0 :(得分:0)
除非对文档进行了排序,否则“任何以前看过的文档都包含此值”的区别是没有意义的。
MongoDB没有任何类型的查询状态变量可以设置为true并在文档之间保留以表明这已经发生。
使用汇总,您可以: -整理文件 -将它们全部推入阵列 -减少数组以应用条件创建新数组 -展开数组 -将文档恢复到以前的状态
db.collection.aggregate([
{$sort:{sortField:1}},
{$group:{
_id:null,
documents:{$push:"$$ROOT"}
}},
{$project:{
keepers:{
$reduce:{
input:"$documents",
initialValue:{keep:false,documents:[]},
in:{
keep:{$or:[
"$$value.keep",
{$eq:["$$this.restrict_id","13546456566"]}
]},
documents:{
$cond:[
"$$value.keep",
{$concatArrays:["$$value.documents",["$$this"]]},
[]
]}
}
}
}
}},
{$unwind:"$keepers.documents"},
{$replaceRoot:{newRoot:"$keepers.documents"}}
])