gpt4 book ai didi

mongodb - 如何在mongodb中将字符串转换为数值

转载 作者:IT老高 更新时间:2023-10-28 11:05:04 26 4
gpt4 key购买 nike

我正在尝试将包含数值的字符串转换为其在 MongoDB 中的聚合查询中的值。

文档示例

{
"_id": ObjectId("5522XXXXXXXXXXXX"),
"Date": "2015-04-05",
"PartnerID": "123456",
"moop": "1234"
}

我使用的聚合查询示例

{
aggregate: 'my_collection',
pipeline: [
{$match: {
Date :
{$gt:'2015-04-01',
$lt: '2015-04-05'
}}
},
{$group:
{_id: "$PartnerID",
total:{$sum:'$moop'}
}}]}

结果在哪里

{
"result": [
{
"_id": "123456",
"total": NumberInt(0)
}
}

如何将字符串转换为数值?

最佳答案

MongoDB 聚合不允许更改给定字段的现有数据类型。在这种情况下,您应该创建一些编程代码来将 string 转换为 int。检查下面的代码

db.collectionName.find().forEach(function(data) {
db.collectionName.update({
"_id": data._id,
"moop": data.moop
}, {
"$set": {
"PartnerID": parseInt(data.PartnerID)
}
});
})

如果您的集合大小超过上述脚本会降低性能,对于性能 mongo 提供 mongo bulk操作,使用 mongo 批量操作也更新了数据类型

var bulk = db.collectionName.initializeOrderedBulkOp();
var counter = 0;
db.collectionName.find().forEach(function(data) {
var updoc = {
"$set": {}
};
var myKey = "PartnerID";
updoc["$set"][myKey] = parseInt(data.PartnerID);
// queue the update
bulk.find({
"_id": data._id
}).update(updoc);
counter++;
// Drain and re-initialize every 1000 update statements
if (counter % 1000 == 0) {
bulk.execute();
bulk = db.collectionName.initializeOrderedBulkOp();
}
})
// Add the rest in the queue
if (counter % 1000 != 0) bulk.execute();

这基本上将发送到服务器的操作语句数量减少到每 1000 个排队操作仅发送一次。

关于mongodb - 如何在mongodb中将字符串转换为数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29487351/

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