从现有字符串字段派生新的int字段-MongoDB

从现有字符串字段派生新的int字段-MongoDB,mongodb,mongodb-query,Mongodb,Mongodb Query,我收集了以下文件: [ { "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"), "Name":"NM-1", "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"), "DateModified" : ISODate("2019-12-23T08:08:40.339Z"), "IsDeleted" : false, }, { "_i

我收集了以下文件:

[
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-1",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-02",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-095",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-0096",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-105",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-0106",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-000109",
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  ...
]
我想在文档编号中添加一个新字段(如果不存在)。数字字段将等于字段名称中的数字,不带NM-和预零

例如,处理后:

[
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-1",
    "Number": 1,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-02",
    "Number": 2,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-095",
    "Number": 95,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-0096",
    "Number": 96,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-105",
    "Number": 105,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-0106",
    "Number": 106,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  {
    "_id" : NUUID("51611712-b966-4562-8937-06015a6691ec"),
    "Name":"NM-000109",
    "Number": 109,
    "DateCreated" : ISODate("2019-07-29T11:33:19.090Z"),
    "DateModified" : ISODate("2019-12-23T08:08:40.339Z"),
    "IsDeleted" : false,
  },
  ...
]
如何为其编写MongoDB脚本?

MongoDB 4.2+具有聚合管道操作符,可能适合您

db.collection.<update method>(
    {},
    [
        {"$set": {"newIntField": { $toInt: "$Name" }}}
    ]
)
查看更多详细信息

MongoDB 4.2+具有聚合管道操作符,可能适合您

db.collection.<update method>(
    {},
    [
        {"$set": {"newIntField": { $toInt: "$Name" }}}
    ]
)

签出更多详细信息

使用聚合管道,我们可以获得所需的结果

管道阶段-和是必需的

管道运营商-并且是必需的

查询以获取结果

db.collection_name.aggregate([
    { $project: { 
        "Name":1, 
        "DateCreated" : 1, 
        "DateModified" : 1, 
        "IsDeleted" : 1,
        "Number" : {
             $toInt : { $substr : ["$Name", 3, -1] } 
           } 
       } 
    },
    {$out: "collection_name"}
  ]);
请注意:

在子字符串操作中,我们从3开始,以-1结束。如果长度为负数,则mongo将处理从起始点开始的字符串的其余部分。因为我们从3开始,如果集合中的所有名称都具有前缀NM-,则此查询将起作用


我们正在使用$out重写整个集合,并使用added Number属性

使用聚合管道,我们可以得到所需的结果

管道阶段-和是必需的

管道运营商-并且是必需的

查询以获取结果

db.collection_name.aggregate([
    { $project: { 
        "Name":1, 
        "DateCreated" : 1, 
        "DateModified" : 1, 
        "IsDeleted" : 1,
        "Number" : {
             $toInt : { $substr : ["$Name", 3, -1] } 
           } 
       } 
    },
    {$out: "collection_name"}
  ]);
请注意:

在子字符串操作中,我们从3开始,以-1结束。如果长度为负数,则mongo将处理从起始点开始的字符串的其余部分。因为我们从3开始,如果集合中的所有名称都具有前缀NM-,则此查询将起作用


我们使用$out重写整个集合,添加了数字属性

名称字段有字符串值NM-前缀,因此名称字段不能转换为数字,首先我们需要使用子字符串拆分数字部分和前缀部分,然后我们可以使用$TOINT名称字段有字符串值NM-前缀,因此名称字段不能转换为数字,首先我们需要使用substring分割数字部分和前缀部分,然后我们可以使用$toInt