如何在创建构面运算符的数组上查找ID

时间:2019-05-20 23:45:08

标签: ruby-on-rails ruby mongodb aggregate mongoid

我在MongoDB上有客户集合。带状态字段。可以具有相同的ID字段。 我需要找到第一个更改的值(例如“来宾”)并将其ID推送到名为“来宾”的特定管道。 对于状态为“成员”的客户,我需要从聚合管道“来宾”中推入另一个管道,该管道名为“成员”,其ID与ID相等。 这样做是为了获得“客人”和“成员”中的数量元素。

其会员商品:

{"_id"=>{"$oid"=>"5ce2ecb3ad71852e7fa9e73f"},
       "status"=>"member",
       "duration"=>nil,
       "is_deleted"=>false,
       "customer_id"=>"17601",
       "customer_journal_item_id"=>"62769",
       "customer_ids"=>"17601",
       "customer_journal_item_ids"=>"62769",
       "self_customer_status_id"=>"21078",
       "self_customer_status_created_at"=>"2017-02-01T00:00:00.000Z",
       "self_customer_status_updated_at"=>"2017-02-01T00:00:00.000Z",
       "updated_at"=>"2019-05-20T18:06:43.655Z",
       "created_at"=>"2019-05-20T18:06:43.655Z"}}

我的聚集

    {
        '$sort': {'self_customer_status_created_at': 1}
    }, 
    {'$match': 
        {
            'self_customer_status_created_at': 
            {
                "$gte": Time.parse('2017-01-17').beginning_of_month, 
                "$lte": Time.parse('2017-01-17').end_of_month 
            }
        } 
    }, 
    {
        "$facet": {
            "guests": 
            [ 
                { 
                    "$group": {
                        "_id": "$_id", 
                        "data": {
                            '$first': '$$ROOT'
                        } 
                    } 
                }, 
                {
                    "$match": {
                        "data.status": "guest"
                    }
                }, {
                    "$group": {
                        "_id":nil, 
                        "array":{
                            "$push": "$data.self_customer_status_id" 
                        } 
                    } 
                }, 
                { 
                    "$project":{
                        "array": 1,
                        "_id":0
                    } 
                }
            ], "members": 
            [ 
                { 
                    "$group": {
                        "_id": "$_id", "data": {
                            '$last': '$$ROOT'
                        } 
                    } 
                }, 
                {
                    "$match": {
                        "data.status": "member",
                        "data.self_customer_status_id": {
                            "$in": [
                                    "$guests.array"
                                  ]
                            }  
                        } 
                    }
                } 
            ] 
        } 
    }, {
        "$project": 
        { 
            "members": 1, 
            "guests.array": 1 
        } 
        } 
    ]
).as_json

代替“ guests.array”数组吗?我有错误: Mongo::Error::OperationFailure: $in needs an array (2)

我在做什么错? 抱歉,我的英文!

1 个答案:

答案 0 :(得分:0)

面对的第二种表达没有看到第一种表达 需要删除

,
                        "data.self_customer_status_id": {
                            "$in": {
                                "$arrayElemAt": 
                                [
                                    "$guests.array", 
                                    0
                                ]
                            }  
                        } 
    {"$match": {"data.self_customer_status_id": { "$in": ["guests.array"] } } }
    ```
this link paste before $project