gpt4 book ai didi

string - MongoDB:使用 map-reduce 将字符串更改为整数

转载 作者:可可西里 更新时间:2023-11-01 10:43:07 26 4
gpt4 key购买 nike

我是新来的,想问一个我一直面临的与 mongodb 相关的问题。

这是一个记录的示例结构。

{
"_id" : {
"id" : "lk23j",
"language" : "English"
},
"class" : "test",
"title" : {
"duration" : "34"
"year" : "1991"
}
}

有几条这样的记录,我想在所有记录中计算持续时间的总和。据我了解,聚合不起作用,因为 title.duration 字段需要转换为整数,因此求和返回 NaN(不是数字)。因此,我需要转换然后使用 map-reduce 求和,这将允许 parseInt(在 javascript 中)。

来自 http://blog.physalix.com/datas-manipulation-in-mongodb-rename-field-change-type-add-sub-document/ ,我无法将 title.duration 更改为整数:

db.members.find().forEach( function (x) {x.title.duration= parseInt(x.title.duration);});

上面的查询抛出了一个

"cannot read property 'duration' of undefined".

我经常遇到错误

Invalid left-hand side in assinment" for "title.duration"= parseInt("title.duration");

我尝试过使用 map-reduce 的类似方法,但没有成功。我在引用数据 title.duration 时遇到问题。

如果有人能帮忙,我将不胜感激!

最佳答案

您可以尝试过滤您的集合以查找 title.duration 字段为字符串类型且存在的文档,然后遍历 find() 光标与 forEach 方法,进行转换并保存更新后的文档。

让我们采用最小的测试用例并将以下测试文档插入到测试集合中:

db.test.insert([
{
"_id" : {
"id" : "lk23j",
"language" : "English"
},
"class" : "test",
"title" : {
"duration" : "34",
"year" : "1991"
}
},
{
"_id" : {
"id" : "abc",
"language" : "French"
},
"class" : "foo"
},
{
"_id" : {
"id" : "def",
"language" : "German"
},
"class" : "bar",
"title" : {
"year" : "1991"
}
},
{
"_id" : {
"id" : "erb42",
"language" : "Shona"
},
"class" : "xyz",
"title" : {
"duration" : null,
"year" : "1993"
}
},
{
"_id" : {
"id" : "urn321",
"language" : "Latin"
},
"class" : "bar",
"title" : {
"duration" : "",
"year" : "1999"
}
}
])

然后可以按如下方式执行上述转换操作:

db.test.find({ "title.duration": { "$type" : 2 } }).forEach(function (doc){ 
doc.title.duration = parseInt(doc.title.duration) || 0;
db.test.save(doc);
});

转换后,您可以使用聚合框架计算所有文档的 title.duration 字段的总和,如下所示:

db.test.aggregate([
{
"$group": {
"_id": null,
"total_duration": {
"$sum": "$title.duration"
}
}
}
]);

结果:

/* 0 */
{
"result" : [
{
"_id" : null,
"total_duration" : 34
}
],
"ok" : 1
}

关于string - MongoDB:使用 map-reduce 将字符串更改为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057627/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com