我想要做的事情非常简单,但我无法找到如何给一个字段赋予另一个字段的价值.
我只想用另一个字符计数更新一个字段.
db.collection.update({$exists:true},{$set : {field1 : field2.length}})
Run Code Online (Sandbox Code Playgroud)
我试过给它点符号
db.collection.update({$exits:true},{$set : {field1: "this.field2.length"}})
Run Code Online (Sandbox Code Playgroud)
以及使用javascript语法
db.collection.update({$exits:true},
{$set : {field1: {$where : "this.field2.length"}})
Run Code Online (Sandbox Code Playgroud)
但只是复制了字符串并分别获得了"notOkforstorage".有帮助吗?
更新:当我按ID查询时,我只获得"notOkforStorage":
db.collection.update({_id:ObjectID("38289842bbb")},
{$set : {field1: {$where :"this.field2.length"}}})
Run Code Online (Sandbox Code Playgroud)
Leo*_*tny 16
请尝试以下代码:
db.collection.find(your_querry).forEach(function(doc) {
doc.field1 = doc.field2.length;
db.collection.save(doc);
});
Run Code Online (Sandbox Code Playgroud)
您可以使用your_querry仅选择原始集合的一部分来执行更新.如果要处理整个集合,请使用your_querry = {}.
如果您希望所有操作都是原子操作,请使用update而不是save:
db.collection.find( your_querry, { field2: 1 } ).forEach(function(doc) {
db.collection.update({ _id: doc._id },{ $set: { field1: doc.field2.length } } );
});
Run Code Online (Sandbox Code Playgroud)
开始Mongo 4.2,db.collection.update()可以接受聚合管道,最后允许基于另一个字段更新/创建一个字段:
// { "_id" : ObjectId("5e84c..."), "field1" : 12, "field2" : "world" }
db.collection.update(
{ "_id" : ObjectId("5e84c...") },
[{ $set: { field1: { $strLenCP: "$field2" } } }]
)
// { "_id" : ObjectId("5e84c..."), "field1" : 5, "field2" : "world" }
Run Code Online (Sandbox Code Playgroud)
第一部分{}是匹配查询,过滤要更新的文档。
第二部分[{ $set: { field1: { $strLenCP: "$field2" } } }]是更新聚合管道(注意方括号表示使用聚合管道)。$set是一个新的聚合运算符和$addFields. 任何聚合运算符都可以在$set阶段内使用;在我们的例子中$strLenCP,它提供了field2.
| 归档时间: |
|
| 查看次数: |
14831 次 |
| 最近记录: |