我有一个由以下条目组成的集合:
{
"_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 ] }