Mongodb为符合特定条件的条目分割子串

时间:2015-12-16 03:46:39

标签: mongodb mongodb-query aggregation-framework

我有一个由这些条目组成的集合:

{
        "_id" : "85f4f64e-1c50-4a3c-a2bf-72bc5fba7eca",
        "properties" : {
                "property1" : "AB12345",
                "property2" : "XXXXXX"
        },
        "otherproperties" : [
                {
                        "Name" : "John",
                        "Time" : 1436,
                        "Count" : 5041


 }

我需要找到其他属性存在且不是[]

的那些

但我同时也需要将property1拆分为两个子串

"property0" : "AB"
"property1" : "12345"

我希望实现的内容大致低于mongodb的SQL语句

select substr(property1,0,2) , substr(property1,2,5), property2 from mycollection where otherproperties !=''

我更喜欢单一查询,因为之后我需要使用此查询作为过滤器

将结果导出为CSV

2 个答案:

答案 0 :(得分:1)

您需要使用aggregate()方法来提供对聚合管道的访问。管道中的第一个阶段是$match阶段,您只选择那些“otherproperties”$exists的子文档。下一个和最后一个阶段是$project阶段,您可以使用$substr运算符作为字符串的子字符串。

db.mycollection.aggregate([ 
    { '$match': { 'otherproperties.0': { '$exists': true } } },
    { '$project': { 
        'subproperty1_1': { '$substr': [ '$properties.property1', 0, 2 ] },
        'subproperty1_2': { '$substr': [ '$properties.property1', 2, 5 ] },
        'property2': '$properties.property2'
    }}
])

哪个收益率:

{
        "_id" : "85f4f64e-1c50-4a3c-a2bf-72bc5fba7eca",
        "subproperty1_1" : "AB",
        "subproperty1_2" : "12345",
        "property2" : "XXXXXX"
}

答案 1 :(得分:0)

您可以在mongodb中使用$substr

{ $substr: [ <string>, <start>, <length> ] }

前:

property0: { $substr: [ "$property1", 0, 2 ] }