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