Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb MapReduce以随机顺序将项目插入新集合_Mongodb_Mapreduce - Fatal编程技术网

Mongodb MapReduce以随机顺序将项目插入新集合

Mongodb MapReduce以随机顺序将项目插入新集合,mongodb,mapreduce,Mongodb,Mapreduce,我有一些文件看起来像: { _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: 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"});
}

对于(i=1;i好的,下面是一个有效的解决方案:

使用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"});
}
接下来,确保索引加快排序速度:

db.randomlyOrdered.ensureIndex({"value":1});
现在,找到数字(随机排序)


你能解释一下“随机排序”是什么意思吗?你的意思是想让$natural order与id order不对应吗?还有,你的收藏在现实生活中有多大?我的意思是…不插入1,2,3,4,5等。(如你所见,文档的id是递增的整数)数据集在“现实生活”中大约有100-200万个文档,从技术上讲,mongodb不会按顺序插入,因此文档已经部分随机。但是,在一个集合中随机插入(均匀分布);然后一种方法是在目标集合中使用增量id或rand()写入200万行介于0和1之间,然后使用rand()然而,要使用源中的行更新目标集合中的该行,您可能只是希望随机选择它们,而不是按随机自然顺序存储,因为再次选择它们不一定像自然选择那样随机order@Sammaye-您看过示例代码了吗?它插入了一个增量id(在for循环中)作为一个例子,你能解释一下将它们按随机顺序排列的用例吗?也许有一种不同的方法来保证你想要达到的目的。但是
stuff
中的数据也不会被写入,因为它仍然会以大致的顺序插入,这很公平,因为在mr的输入查询中没有排序,所以不是真正的顺序,但仍然是正确的不会完全“随机”是的,但我们可以使用上一个查询从集合中查询出来(随机排序)-这不完全是我想要的,但它会得到最好的结果我想好的,是的,只要你使用另一个集合作为rand()的查找就应该可以了,我只是想…我知道这听起来很愚蠢,但你为什么不使用rand()在原始集合上?我的意思是,你现在基本上是在寻找随机,而不是插入真正的随机。说来话长…但基本上,这个mapReduce将每小时运行大约6次,以再次“随机”集合…很难解释lol
db.randomlyOrdered.ensureIndex({"value":1});
db.randomlyOrdered.find({}, {"_id":1}).sort({"value":1});