如何更新 mongodb 中的字符串字段并操作字符串值? [英] How to update string field in mongodb and manipulate string values?

查看:38
本文介绍了如何更新 mongodb 中的字符串字段并操作字符串值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 MongoDB 集合,其中包含一个名为 Personal.FirstName 的字段和另一个名为 Personal.Surname 的字段的文档.一些文件被弄乱了,并且在两个字段中都有人的名字和姓氏.例如,有些文档的 Personal.FirstName = 'John Doe' 和 Personal.Surname = 'John Doe'.

I have a MongoDB collection with some documents that have a field called Personal.FirstName and another field call Personal.Surname. Some documents are messed up and have the persons first name and last name in both fields. For example there are some documents that have Personal.FirstName = 'John Doe' and Personal.Surname = 'John Doe'.

我想写一个 mongo update 语句来执行以下操作:

I want to write a mongo update statement that will do the following:

  • 查找包含个人部分的所有文档
  • 查找 Personal.FirstName == Personal.Surname 的所有文档
  • 将 Personal.FirstName 更新为 Personal.FirstName 空格前的第一部分
  • 将 Personal.Surname 更新为 Personal.Surname 空格后的第二部分

这在 mongo 更新语句中是可能的吗?我是 mongo 的新手,对如何查询它知之甚少.

Is this possible in a mongo update statement? I am new to mongo and know very little about how to query it.

这是一个示例文档

{
    "_id" : LUUID("fcd140b1-ec0f-0c49-aa79-fed00899290e"),
    "Personal" : {
        "FirstName" : "John Doe",
        "Surname" : "John Doe"
    }
}

推荐答案

你不能在单个查询中做到这一点,但你可以通过像这样迭代结果来实现这一点:

you can't do this in a single query, but you can achieve this by iterating over result like this :

db.name.find({$and: [{Personal: {$exists: true}}, {$where: "this.Personal.FirstName == this.Personal.Surname"}]}).forEach(function(e,i){
    var parts = e.Personal.FirstName.split(" ");
    e.Personal.FirstName = parts[0];
    e.Personal.Surname = parts[1];
    db.name.save(e); 
})

结果:

{ "_id" : "fcd140b1-ec0f-0c49-aa79-fed00899290e", "Personal" : { "FirstName" : "John", "Surname" : "Doe" } }

这篇关于如何更新 mongodb 中的字符串字段并操作字符串值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆