当前位置: 首页 > 知识库问答 >
问题:

MongoDB:如何使某些记录的某些字段大写?

彭宏深
2023-03-14

我知道这是一个非常简单的问题,但我似乎找不到一个令人满意的答案。另外,我对Mongo完全是个新手。这显然无济于事。

假设我收藏了...我希望将mongo中的$toupper函数应用于具有_idObjectid(1)Objectid(2)的记录的name字段,而不是应用于具有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"
        }
    ]
}
{
    [
        {
            "_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"
        }
    ]
}

我一直在玩Mongo的聚合(针对我在google中发现的),但我得到的最多的是一个返回“name”字段的查询,但是:

  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
}

共有1个答案

宗政霄
2023-03-14

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

use DATABASE_NAME;
db.CollectionName.find([find_criteria]).forEach(function(doc) { 
   db.CollectionName.update(
       { _id: doc._id},
       { $set : { 'FieldName' : doc.FieldName.toUpperCase() } },
       { multi: true }
   )
});
 类似资料:
  • 问题内容: 我正在使用Elasticsearch索引我的文档。 是否有可能指示它仅返回特定字段,而不是它存储的整个json文档? 问题答案: 是的 使用源过滤器。如果您使用JSON搜索,它将看起来像这样: 在ES 2.4及更低版本中,您还可以在search API中 使用fields选项: ES 5+中已弃用此功能。而且,源过滤器更强大!

  • 我使用elasticsearch 0.90.2和elasticsearch river mongodb 1.7.0从mongodb的oplog中检索数据。在我试图索引的集合中,我有数千条结构化记录,让我们把它们命名为“field1”、“field2”、“field3”字段10' 有没有办法只索引“field1”和“field2”?这些是字符串还是日期对象有关系吗? 谢啦

  • 我想知道是否可以使用此方法忽略字段,因为我有一个要忽略的字段列表,在同一个类中,那么我该如何做呢? 我正在使用 谢谢

  • 我有Solr 5.3.1,需要查询除某些字段之外的所有字段(我需要在某些字段中搜索而不是以这种方式检索字段[/?q=query&fl=field1,field2,field3]) 2.[以下解决方案有效,但需要更多时间] 3.我在data-config.xml中设置了indexed=“false”,它只忽略此字段中的搜索,但是当我搜索所有字段http://localhost:8983/solr/t

  • 本文向大家介绍如何在MySQL中选择以某些数字开头的记录?,包括了如何在MySQL中选择以某些数字开头的记录?的使用技巧和注意事项,需要的朋友参考一下 选择以某些数字开头的记录的最佳解决方案是使用MySQL LIKE运算符。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是查询以选择在MySQL中以某些数字开头的记录的查询

  • 问题内容: 如何配置带有 和的log4j.properties 而不是标准输出? 提高rootlogger到信息是不可接受的,因为我在调试级别有其他软件包。 问题答案: 在文件中,添加行 将记录器的输出定向到附加程序。 还包括线 以防止记录器的输出发送到的附加程序。