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



我有一个由以下条目组成的集合:

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

 }

我需要找到那些存在其他属性但不是的属性

但我同时也需要属性1拆分为两个子字符串

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

我希望实现的大致如下mongodb 的SQL语句

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

我更喜欢单一查询,因为之后我需要使用此查询作为过滤器以CSV导出结果

您需要使用aggregate()方法,该方法提供对聚合管道的访问。管道中的第一个阶段是$match阶段,在该阶段中,您只选择"其他属性"为$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"
}

您可以在mongodb 中使用$substr

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

例如:

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

相关内容

  • 没有找到相关文章

最新更新