0

我有一些文件看起来像:

{
  _id: 3, 
  key: 3, 
  stuff: "Some data"
}

有些文件也有signUpDate

我们可以为演示目的填充一个集合,如下所示:

for(i=1; i<=100000; i++){
if(i%3===0)
     db.numbers.insert({_id:i, key:i, stuff:"Some data", signUpDate: new Date()});
else
     db.numbers.insert({_id:i, key:i, stuff:"Some data"});
}

...所以三分之一的文件有一个 signUpDate

我要做的是创建一个map reduce函数,该函数获取所有文档,其中signUpDate不为null,并将它们插入一个单独的集合中,随机排序

这可能吗?

4

1 回答 1

0

好的,这是一个有效的解决方案:

使用 mongoshell:

首先,我们填充数据:

for(i=1; i<=100000; i++){
if(i%3===0)
     db.numbers.insert({_id:i, key:i, stuff:"Some data", signUpDate: new Date()});
else
     db.numbers.insert({_id:i, key:i, stuff:"Some data"});
}

所以现在,我们有三分之一的数据带有 signUpDate。

现在,一个超级简单的 mapreduce:

m = function() {emit(this._id, Math.random());}
r = function(key, values){}

db.numbers.mapReduce(m,r, {out: "randomlyOrdered", query: { signUpDate: { $ne : null } }});

接下来,使用 ensureIndex 来加速排序:

db.randomlyOrdered.ensureIndex({"value":1});

现在,找到数字(随机排序)

db.randomlyOrdered.find({}, {"_id":1}).sort({"value":1});
于 2012-11-28T17:07:07.877 回答