如何动态$set字段名从变量在Mongo脚本

How to Dynamically $set Field Name From Variable in Mongo Script

本文关键字:变量 脚本 Mongo 字段 set 何动态 动态      更新时间:2023-09-26

我正在编写一个脚本,将在MongoDB的shell中运行。我只使用纯Javascript,而不是node.js或Meteor。我有一个数组,其中分别包含字段名和字段值的键和值对。我正试图使用数组中的键值作为更新函数中的字段名。

var USER_ID = 1234567
var myArray = [
   { key : "name.first.nickname", value : "Sammy" }
]
for(var i = 0; i < myArray.length; i++){
    setFields(myArray[i].key, myArray[i].value)
}
function setFields(key, value){
    db.nameCollection.update(
    {user : USER_ID},
    {
     $set: {
       key : value
      }
    }
   )
}

字段名总是设置为"key",而不是key变量的值"name.first.nickname"。有办法做到这一点吗?

function setFields(key, value){
    var update = {$set:{}};    
    update.$set[key] = value;
    db.Test.update(
    {userId : userId},
    update
   );
}
var userId = "daniele";
var myArray = [
   { key : "dynamic_key_002", value : "Sammy" }
]
for(var i = 0; i < myArray.length; i++){
    setFields(myArray[i].key, myArray[i].value)
}

另外,如果你需要进行大量的更新,也许你可以考虑批量更新,而不是逐个查询。

MongoDB为客户端提供了批量写操作的能力。大容量写操作影响单个集合。MongoDB允许应用程序确定批量写操作所需的可接受的确认级别。

https://docs.mongodb.com/manual/core/bulk-write-operations/