我的mongo db包含
> db.collection.find();
{ "_id" : ObjectId("55f8e493d97731874b1235bd"), "Date" : "14-12-2014", "Value" : 25.36 }
{ "_id" : ObjectId("55f8e497d97731874b1235be"), "Date" : "14-11-2014", "Value" : 25.36 }
{ "_id" : ObjectId("55f917f748f91b35cf1ddaac"), "Date" : "14-01-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f917fc48f91b35cf1ddaad"), "Date" : "14-02-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9180148f91b35cf1ddaae"), "Date" : "14-03-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9180848f91b35cf1ddaaf"), "Date" : "14-04-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9180f48f91b35cf1ddab0"), "Date" : "14-05-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9181448f91b35cf1ddab1"), "Date" : "14-06-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9181948f91b35cf1ddab2"), "Date" : "14-07-2015", "Value" : 25.36 }
{ "_id" : ObjectId("55f9181d48f91b35cf1ddab3"), "Date" : "14-08-2015", "Value" : 25.36 }
我想删除三个月的数据。为此
> db.collection.remove( { "Date": {$lt:"14-10-2014"} } );
我试过这样但是它没有正常工作。它只是根据月份删除,例如从今天起到2014年1月1日和2014年第9个月删除到1月2104但不是12月& 2104年11月。我该如何解决这个问题?
答案 0 :(得分:4)
我认为您可以尝试以下代码。您可以删除文档而不将日期字段更新为ISODate。作为一种良好做法,您应始终将日期存储为ISODate。它使查询变得容易。
public function ajax()
{
echo 'asd';
}
答案 1 :(得分:1)
您的日期字段无效,因此首先您需要更新文档。最好的方法是使用"Bulk()" API
==
您的文件现在看起来像这样:
bool operator!=(const point_t& p) const
{
return !(*this == p);
}
然后,您可以使用var bulk = db.collection.initializeOrderedBulkOp(),
count = 0
db.collection.find().forEach(function(doc) {
var newDate = new Date(doc.Date.replace(/(\d{2})-(\d{2})/, "$2-$1"));
bulk.find({ "_id": doc._id }).updateOne({
"$set": { "Date": newDate }});
count++;
if (count % 100 == 0) {
bulk.execute();
bulk = db.collection.initializeUnorderedBulkOp();
}
})
if (count % 100 != 0)
bulk.execute();
方法删除旧文档。
{ "_id" : ObjectId("55f8e493d97731874b1235bd"), "Date" : ISODate("2014-12-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f8e497d97731874b1235be"), "Date" : ISODate("2014-11-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f917f748f91b35cf1ddaac"), "Date" : ISODate("2015-01-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f917fc48f91b35cf1ddaad"), "Date" : ISODate("2015-02-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f9180148f91b35cf1ddaae"), "Date" : ISODate("2015-03-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f9180848f91b35cf1ddaaf"), "Date" : ISODate("2015-04-13T21:00:00Z"), "Value" : 25.36 }
{ "_id" : ObjectId("55f9180f48f91b35cf1ddab0"), "Date" : ISODate("2015-05-13T21:00:00Z"), "Value" : 25.36 }
答案 2 :(得分:0)
这可以胜任
db.test.remove({'$where':function(){
var x = this.Date.split('-');
var dt = new Date(x[2], x[1] - 1, x[0]);
var y='14-10-2014'.split('-');
var chkDt = new Date(y[2], y[1] - 1, y[0]);
return dt < chkDt; }})
虽然在存储
时在文档中使用ISODate()会更好