我收集了一些注册过的数据
{ _id: 0000120210903, iid: 00001, date: 20210903 }, { _id: 0000220210903, IID: 00002, date: 20210903 }, { _id: 0000120210101, IID: 00001, date: 20210101 }
我想删除除每个iid的最新日期的文档之外的所有文档。
我的想法是按日期分组,用最大值(日期)选择寄存器的_id,然后删除除此_id数组之外的所有。但我不知道该怎么做。
db.getCollection('testing_data').aggregate(
{ $sort:{ _id:1 }},
{ $group:{
_id:"$iid",
lastId:{ "$last":"$_id" },
}},
{ $project:{ _id: 0, lastId: 1 } }
)
但我不知道从这里走到哪里。非常感谢任何帮助。
[解决方案]
为了解决这个问题,我使用聚合来恢复字段 iid(文档之间共享的标识符)和唯一_id作为数组的组合。
然后,对于数组上的每个元素,它在 iid 上执行 deleteMany 操作,但释放最近的_id。在这种情况下,我按_id排序,因为它包括日期,但也可以按字段日期排序。
由于数据量很大,必须将其放在聚合中。
var ids = db.getCollection('testing_data').aggregate([
{ $sort:{ _id:1 }},
{ $group:{
_id:"$iid",
lastId:{ "$last":"$_id" },
}},
{ $project:{ _id: 1, lastId: 1 } }
], { allowDiskUse: true } ).toArray();
ids.forEach(function(x){
db.getCollection('testing_data').deleteMany({ "iid": x._id, "_id": {$ne:x.lastId} })
});
[解决方案]
为了解决这个问题,我使用聚合来恢复字段 iid(文档之间共享的标识符)和唯一_id作为数组的组合。
然后,对于数组上的每个元素,它在 iid 上执行 deleteMany 操作,但释放最近的_id。在这种情况下,我按_id排序,因为它包括日期,但也可以按字段日期排序。
由于数据量很大,必须将其放在聚合中。
var ids = db.getCollection('testing_data').aggregate([
{ $sort:{ _id:1 }},
{ $group:{
_id:"$iid",
lastId:{ "$last":"$_id" },
}},
{ $project:{ _id: 1, lastId: 1 } }
], { allowDiskUse: true } ).toArray();
ids.forEach(function(x){
db.getCollection('testing_data').deleteMany({ "iid": x._id, "_id": {$ne:x.lastId} })
});
我的想法只是将所有_id
存储在您要删除的某个数组中,然后使用delete的
和$或
过滤器
db.getCollection("testing_data").find({}).toArray((err,data)=>{
let to_elim = [];
let filtering ={};
for(let el of data){
if(!filtering[el.iid]) filtering[el.iid] = el;
else {
if(filtering[el.iid].date>el.date) to_elim.push({_id:new ObjectID(el._id)})
}
}
db.getCollection("testing_data").deleteMany({$or:to_elim})
})
我希望一切都写正确,因为把所有这些都写在手机上
缺少一些检查是否有更新的。。。
问题内容: 我有一对多关系的两个数据库表。数据如下所示: 结果集: 我想删除所有应用程序,但最新的除外。换句话说,每个学生都只能将一个应用程序链接到该应用程序。使用上面的示例,数据应如下所示: 我将如何构造我的DELETE语句以过滤出正确的记录? 问题答案: 考虑到评论中的长时间讨论,请注意以下几点: 上面的语句 将 在任何正确实现语句级读取一致性的数据库上运行,而不管语句运行时对表的任何更改。
问题内容: 我正在寻找清除整个收藏夹的方法。我看到有一个批处理更新选项,但这需要我知道集合中的所有文档ID。 我正在寻找一种简单地删除集合中每个文档的方法。 谢谢! 编辑:下面的答案是正确的,我使用以下方法: 问题答案: 没有API可以一次性删除整个集合(或其内容)。 从Firestore文档中: 要在Cloud Firestore中删除整个集合或子集合,请检索集合或子集合中的所有文档并将其删除。
据我所知,我可以使用云函数以某种方式实现这一点?我试着阅读云函数,但我很迷路。是否有一种方法可以触发云函数,在用户更新帖子时删除子集合中的所有文档?
问题内容: 我正在尝试从猫鼬文档中存储的集合中删除一项。我的文档如下所示: 我想删除SKU为12的金鱼。我正在执行以下操作: 当我这样做时,出现错误“ TypeError:无法读取未定义的属性’等于’”。我不明白为什么。 问题答案: 您需要,然后打个电话。用于顶级文档
我知道如何。。。 删除单个文档。 但我不知道如何删除Mongoose收藏中的所有文档。我想在用户单击按钮时执行此操作。我假设我需要向某个endpoint发送AJAX请求并让该endpoint进行删除,但我不知道如何在endpoint处处理删除。 在我的例子中,我有一个集合,我想在用户单击按钮时删除所有文档。 api/datetime/index.js API/datetime/datetime.c
我正在尝试用大量新值替换所有文档。 例如,我们在数据库中500k文档,并且我们500k了相同的文档,其中包含更新的道具。现在我们需要更新旧数据。 想法是在新集合中使用InsertMany with lean选项,然后删除旧集合以减少读/写次数。 问题是,对于这种情况,有没有更简单的方法? 在这种情况下,也许连进出口都更好? PS模型。updateMany()有一个过滤器,我们这里不需要过滤器,因为