Mongodb:如何将某些记录的某些字段设为大写?

Bor*_*jaX 2 replace mongodb

我知道这是一个非常简单的问题,但我似乎无法找到满意的答案。另外,我是 Mongo 的新手。这显然没有帮助。

假设我有一组...用户,我想将mongo 中的$toUppername函数应用于带有_id 的记录字段ObjectId(1)ObjectId(2)但不应用于带有ObjectId(3).

所以我有这个:

{
    [
        {
            "_id": ObjectId("1"),
            "name": "user 1",
            "address": "Street 1"
        },
        {
            "_id": ObjectId("2"),
            "name": "user 2",
            "address": "Street 2"
        },
        {
            "_id": ObjectId("3"),
            "name": "user 3",
            "address": "Street 3"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我想要:

{
    [
        {
            "_id": ObjectId("1"),
            "name": "USER 1",
            "address": "Street 1"
        },
        {
            "_id": ObjectId("2"),
            "name": "USER 2",
            "address": "Street 2"
        },
        {
            "_id": ObjectId("3"),
            "name": "user 3",
            "address": "Street 3"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我一直在使用 Mongo 的聚合(对于我在谷歌中找到的内容),但我得到的最远的是有一个返回“name”字段uppered的查询,但是:

  1. 它返回数据库中的所有记录(不仅是ObjectId(“1”)和ObjectId(“2”)
  2. 它不会将更改写入数据库
  3. 它从返回的记录中删除地址字段(不用说,我不想丢失)

db.user.aggregate([{$project: {"name":{$toUpper:"$name"}}}])
{
    "result" : [
        {
            "_id" : ObjectId("1"),
            "name" : "USER 1"
        },
        {
            "_id" : ObjectId("2"),
            "name" : "USER 2"
        },
        {
            "_id" : ObjectId("3"),
            "name" : "USER 3"
        }
    ],
    "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)

kik*_*ell 7

如果您不想更新寄存器以将字段名称更改为大写,您可以尝试以下代码:

use DATABASE_NAME;
db.CollectionName.find([find_criteria]).forEach(function(doc) { 
   db.CollectionName.update(
       { _id: doc._id},
       { $set : { 'FieldName' : doc.FieldName.toUpperCase() } },
       { multi: true }
   )
});
Run Code Online (Sandbox Code Playgroud)