这个问题大多受欢迎,但略有不同;我需要在创建它时使用_id
删除几条记录。我没有任何date
,createdAt
字段为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}});
答案 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});
}
}