Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在mongodb中使用substr后聚合中匹配的项目不起作用_Mongodb_Mongodb Query_Laravel 5.1 - Fatal编程技术网

在mongodb中使用substr后聚合中匹配的项目不起作用

在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

我对mongodb只有一个用途

下面是我的样本记录

{
    "_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谢谢你的支持