在mongodb中使用substr后聚合中匹配的项目不起作用
我对mongodb只有一个用途 下面是我的样本记录在mongodb中使用substr后聚合中匹配的项目不起作用,mongodb,mongodb-query,laravel-5.1,Mongodb,Mongodb Query,Laravel 5.1,我对mongodb只有一个用途 下面是我的样本记录 { "_id" : ObjectId("56fa21da0be9b4e3328b4567"), "us_u_id" : "1459169911J4gPxpYQ7A", "us_dealer_u_id" : "1459169911J4gPxpYQ7A", "us_corporate_dealer_u_id" : "1459169173rgSdxVeMLa", "us_oem_u_id" : "1459169
{
"_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)
但是我得到了一个空白的结果
若我从病况中剔除月份和年份,那个么记录就来了
大多数情况下,我尝试了所有的差异解决方案,但结果是一样的
提前感谢。您写的查询不正确 在此阶段中没有yearSubstring和monthSubstring字段
{
"$match":{
"yearSubstring":"2016",
"monthSubstring":"03",
"us_dealer_u_id":"1459169911J4gPxpYQ7A"
}
},
你应该这样写:
.aggregate(
[
{
"$match":{
"us_dealer_u_id":"1459169911J4gPxpYQ7A"
}
},
{
"$project":
{
"yearSubstring":{"$substr":["$us_date",0,4]},
"monthSubstring":{"$substr":["$us_date",4,2]},
"daySubstring":{"$substr":["$us_date",6,2]}
}
},
{
"$match":{
"yearSubstring":"2016",
"monthSubstring":"03"
}
},
{
"$group":
{
"_id":{"monthSubstring":"$monthSubstring",
"yearSubstring":"$yearSubstring",
"daySubstring":"$daySubstring"
},
"daySubstring":{"$last":"$daySubstring"}
}
},
{"$sort":{"us_date":1}}
]
)
如果你想获得其他字段,你应该将它们包括在投影阶段。匹配的
$match
位置错误。在更改字段的$project
之后需要它。此外,您还可以在$project
或后续$group
中都不存在的$sort
字段上调用$sort
。你需要在这两个字段中都包含这个字段,否则它就不存在了。这也不是一个匹配日期的聪明方法。使用“范围”而不是分解日期。“这样做效率要高得多。”BlakesSeven我首先告诉你,我已经尝试了所有可能的方法来解决这个问题,但结果仍然不是这样come@Vladislav_Kievski谢谢你的支持