如何在MongoDB中使用substr函数?

7
这是将数据从Mongo导出到Oracle表的解决方案,如果有更好的方法,请告诉我。目前我的查询语句如下:
db.getCollection('table_name').find({"key.specificKey": "value"})

我想做的是选择特定的子字符串进行显示。我尝试使用在mongodb文档中找到的substr函数。然而,这对我来说并不起作用。
db.getCollection('table_name').aggregate({columnName: {$substr: ["$key", 0, 2]}})

我也尝试了根据这里建议,使用match函数。但它也无法正常工作。

db.getCollection('table_name').aggregate($match: {"key.specificKey": "value"}, {columnName: {$substr: ["$key", 0, 2]}})

你能纠正我做这件事的语法吗?我使用的是robomongo,如果有关系的话。

示例数据:

{
    "_id" : ObjectId("hey"),
    "key" : {
        "keyId" : NumberLong(1234),
        "keyName" : "valueName",
    }
}

你能否添加一份来自你的收藏中的样例文档? - s7vr
1
您在聚合操作中缺少 $project 阶段。请尝试以下代码:`db.getCollection('table_name').aggregate([ {$match: {"key.specificKey": "value"}}, {$project:{columnName: {$substr: ["$key.keyName", 0, 2]}}} ])` - s7vr
是的,你完全正确! - user9333933
@Veeram,我该如何选择多个子字符串?我正在尝试使用$and。并且不知道在哪里放置它。另外,有没有办法将自己的字符串连接到我的选择上? - user9333933
  1. 在项目中添加包含所需子字符串的字段,以逗号分隔。
  2. 您可以查看 $and 的用法。
  3. 您可以使用 $concat 添加您的字符串。如果您需要详细的答案,请考虑创建一个带有预期的 JSON 输出和一些示例输入文档的问题。
- s7vr
显示剩余2条评论
1个回答

10

为使此功能生效,您需要在聚合管道中使用$project阶段,如下所示:

db.getCollection('table_name').aggregate([{
    $match: {
        "key.specificKey": "value"
    }
}, {
    $project: {
        columnName: {
            $substr: ["$key", 0, 2]
        }
    }
}])

太棒了,谢谢,这个有效!我简直不敢相信我没有注意到那个...我不能给你点赞,但我已把它选为正确答案。 - user9333933
当使用聚合管道时,$gt操作符具有不同的结构,就像许多其他操作符一样。请参见:https://docs.mongodb.com/manual/reference/operator/aggregation/gt/ - Ayush Gupta
嘿,是的,我搞定了,谢谢!我能用所选字符串进行字符串连接吗?你知道这个吗?如果你不知道也没关系,我可以创建一个新问题。 - user9333933
我会使用$let来创建一个变量,用于存储新值(substr 运算后的结果),然后使用$concat进行连接。同时需要注意,substr在3.4版本之后已经被弃用,建议使用$substrBytes代替。 - jesus g_force Harris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接