更新集合上元素的随机数组值

时间:2018-02-12 11:36:11

标签: javascript node.js mongodb

我有一个包含1700个条目的数据集,其条目如下:

{
    "_id" : ObjectId("5a7acda13b808dbed05d6505"),
    "name" : "Nil",
    "symbol" : "@A",
    "isin" : "47",
    "group" : "Nil",
    "sector" : "Nil",
    "tagcounter" : 0
},
{
    "_id" : ObjectId("5a7acda13b808dbed05d6506"),
    "name" : "Nil",
    "symbol" : "@B",
    "isin" : "48",
    "group" : "Nil",
    "sector" : "Nil",
    "tagcounter" : 0
},
{
    "_id" : ObjectId("5a7acda13b808dbed05d6507"),
    "name" : "Nil",
    "symbol" : "@C",
    "isin" : "49",
    "group" : "Nil",
    "sector" : "Nil",
    "tagcounter" : 0
}//.....upto 1700 entries

现在我有一个像这样有一些价值的数组:

var array = ['Fruit', 'Vegetable', 'Drinks', 'Fast-Food', 'Healthy-Food'];

现在我想将整个扇区值从“Nil”更新为“Any from From array”。 预期结果如下:

{
    "_id" : ObjectId("5a7acda13b808dbed05d6505"),
    "name" : "Nil",
    "symbol" : "@A",
    "isin" : "47",
    "group" : "Nil",
    "sector" : "Fruit",
    "tagcounter" : 0
},
{
    "_id" : ObjectId("5a7acda13b808dbed05d6506"),
    "name" : "Nil",
    "symbol" : "@B",
    "isin" : "48",
    "group" : "Nil",
    "sector" : "Drinks",
    "tagcounter" : 0
},
{
    "_id" : ObjectId("5a7acda13b808dbed05d6507"),
    "name" : "Nil",
    "symbol" : "@C",
    "isin" : "49",
    "group" : "Nil",
    "sector" : "Fast-Food",
    "tagcounter" : 0
}

我为此所做的是:

db.Collection.update({},{$set: {'sector': ['Fruit', 'Vegetable', 'Drinks', 'Fast-Food', 'Healthy-Food']}}, {multi: true }, function(error, data){
  if( error) {
    console.log(error);
  } else {
    console.log(data);
  }
});

但是,通过这个,整个数组被复制到每个字段而不是一个值。

我知道提供整个阵列存在问题。

如果有人有此解决方案,请告诉我。

1 个答案:

答案 0 :(得分:0)

db.Collection.find({}).forEach((doc) => {
  db.Collection.update({_id: doc._id}, {$set: {sector: array[Math.floor(Math.random()* array.length)]}})
})

请参阅here forEach光标文档。