Mongo DB使用remove命令删除旧数据

时间:2015-09-16 07:25:35

标签: mongodb date mongodb-query

我的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月。我该如何解决这个问题?

3 个答案:

答案 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()会更好