删除由其id中的时间戳记录的mongo

时间:2017-12-06 10:25:57

标签: mongodb

这个问题大多受欢迎,但略有不同;我需要在创建它时使用_id删除几条记录。我没有任何datecreatedAt字段为I see,mongo将_id用于createdAt时间戳。

如何使用此gist

删除30天前创建的已录制的新内容
const date = new Date();
const daysToDeletion = 30;
const deletionDate = new Date(date.setDate(date.getDate() - daysToDeletion));

const db = <your-database>

db.messages.remove({_id : {$lt : deletionDate}});
  

以上内容会返回CastError

什么会起作用,正如我所说,我没有createdAt字段:

db.messages.remove({createdAt : {$lt : deletionDate}});

3 个答案:

答案 0 :(得分:1)

使用mongo shell:

Model.find({ _id: { $gt: mongoose.Types.ObjectId.createFromTime(new Date('2018-01-01')) } })

使用mongoose:

For each ChildContainer item in dir 
Create an OrderedList of names 
For each ChildData item of the ChildContainer 
Add the ChildData name to the OrderedList of names

会找到所需的文档。

答案 1 :(得分:0)

var id = new ObjectId(Math.floor(deletionDate .getTime()/ 1000).toString(16)+&#34; 0000000000000000&#34;)

db.messages.remove({createdAt:{$ lt:id}});

答案 2 :(得分:0)

您需要从对象_id中提取时间戳。所以你可以这样做: -

db.messages.find({}).forEach(function(rec) {
    var recDate = rec._id.getTimestamp();
    // Then here cast your deletionDate and recDate to preferred string format, e.g:-
    var recDateString = recDate.getMonth()+1+'-'+recDate.getDate()+'-'+recDate.getFullYear();
    var deletionDateString = deletionDate.getMonth()+1+'-'+deletionDate.getDate()+'-'+deletionDate.getFullYear();

    if (deletionDateString == recDateString ){
        db.messages.remove({_id:rec._id});
    }
}