1
我有一个使用mongodb的问题。在mongodb中使用substr后,聚合中匹配的项目不能使用
下面是我的样本记录。
{
"_id" : ObjectId("56fa21da0be9b4e3328b4567"),
"us_u_id" : "1459169911J4gPxpYQ7A",
"us_dealer_u_id" : "1459169911J4gPxpYQ7A",
"us_corporate_dealer_u_id" : "1459169173rgSdxVeMLa",
"us_oem_u_id" : "1459169848CK5yOpXito",
"us_part_number" : "E200026",
"us_sup_part_number" : "",
"us_alter_part_number" : "",
"us_qty" : 0,
"us_sale_qty" : 2,
"us_date" : "20160326",
"us_source_name" : "BOMAG",
"us_source_address" : "",
"us_source_city" : "",
"us_source_state" : "",
"us_zip_code" : "",
"us_alternet_source_code" : "",
"updated_at" : ISODate("2016-03-29T06:34:02.728Z"),
"created_at" : ISODate("2016-03-29T06:34:02.728Z")
}
我必须设法让所有条记录具有独特的日期
所以,我在下面的查询使用由骨料
.aggregate(
[
{
"$match":{
"yearSubstring":"2016",
"monthSubstring":"03",
"us_dealer_u_id":"1459169911J4gPxpYQ7A"
}
},
{
"$project":
{
"yearSubstring":{"$substr":["$us_date",0,4]},
"monthSubstring":{"$substr":["$us_date",4,2]},
"daySubstring":{"$substr":["$us_date",6,2]}
}
},
{
"$group":
{
"_id":{"monthSubstring":"$monthSubstring",
"yearSubstring":"$yearSubstring",
"daySubstring":"$daySubstring"
},
"daySubstring":{"$last":"$daySubstring"}
}
},
{"$sort":{"us_date":1}}
]
)
我尝试两种方式来传递年份和月份(如串和int)
但我得到空白的结果。
如果我从条件中删除月份和年份,然后记录来了。
大多我已尝试所有的差异。差异。解决方案但结果相同。
提前致谢。
'$ match'在错误的地方。你需要它“之后”改变字段的'$ project'。你也可以在'$ project'或后续的'$ group'这个'us_date'字段中调用'$ sort'。你需要在这两个字段中包含这个字段,否则它根本就不存在。 –
这也不是一个聪明的方式来匹配日期。使用“范围”而不是分手日期。这样做效率更高。 –
@BlakesSeven我先告诉你,我尽力解决这个问题,但仍然没有结果 –