从现有字符串字段派生新的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