首页 > 解决方案 > 遍历 MongoDB 中的列表

问题描述

我是 MongoDB 的新手,我每天都在尝试从集合中删除一些条目。我必须每天都这样做,因为收藏量很大,并且按月删除。这是我的示例代码:

days = ['2018-04-01-day','2018-04-02-day','2018-04-03-day','2018-04-04-day','2018-04-05-day','2018-04-06-day','2018-04-07-day','2018-04-08-day','2018-04-09-day','2018-04-10-day','2018-04-11-day','2018-04-12-day','2018-04-13-day','2018-04-14-day','2018-04-15-day','2018-04-16-day','2018-04-17-day','2018-04-18-day','2018-04-19-day','2018-04-20-day','2018-04-21-day','2018-04-22-day','2018-04-23-day','2018-04-24-day','2018-04-25-day','2018-04-26-day','2018-04-27-day','2018-04-28-day','2018-04-29-day','2018-04-30-day']
var day;
for(day of days)
    {
        print(day)
        db.<colln>.remove
        (
            { 'time_bucket': day },
            { 'URL':/https:\/\/abc.com/}
        )
    }

上面的代码执行,但只给了我以下内容:

     2018-04-06-day
WriteResult({ "nRemoved" : 0 })

我本来希望至少能看到所有打印的日期,但即使这样也没有发生。

我尝试了使用 UTC 日期方法的其他方法,但它们似乎效果不佳。

我能够使以下代码适用于较小的集合:

db.<small colln>.remove(
    { 'time_bucket': '2018-04-month' },
    { 'URL':/https:\/\/abc.com/}
    )

但是上面的代码(按月删除)不适用于更大的集合,这就是为什么我被迫每天都这样做,通过创建一个数组来持续多天。我知道这不是最有效的方法,但我只需要让它工作。

任何帮助将非常感激。

标签: mongodbmongodb-query

解决方案


for(var day in days)将遍历数组的索引,产生

for(var day in days){ print (day) }
0
1
2
3
4
5

我相信您打算使用for(var day of days)

for(var day of days){ print (day) }
2018-04-01-day
2018-04-02-day
2018-04-03-day
2018-04-04-day
2018-04-05-day
2018-04-06-day

只是想添加更多细节。我在这个集合上的本地 MongoDB 4.2 上测试了以下内容:

{ "_id" : ObjectId("6053e2f7acf8d9b7cc48adf0"), "name" : "test 4", "time_bucket" : "2018-04-03-day" }
{ "_id" : ObjectId("6053e4ccacf8d9b7cc48adf1"), "name" : "test", "time_bucket" : "2018-04-01-day" }
{ "_id" : ObjectId("6053e4d3acf8d9b7cc48adf2"), "name" : "test 1", "time_bucket" : "2018-04-01-day" }
{ "_id" : ObjectId("6053e4ddacf8d9b7cc48adf3"), "name" : "test 34", "time_bucket" : "2018-04-02-day" }
const days = ['2018-04-01-day','2018-04-02-day']
for(let day of days){ db.testcol.remove( { 'time_bucket': day }) }

执行后,集合如下所示:

{ "_id" : ObjectId("6053e2f7acf8d9b7cc48adf0"), "name" : "test 4", "time_bucket" : "2018-04-03-day" }

所以一切似乎都按预期工作。


推荐阅读