ruby-on-rails - 如何在创建方面运算符的数组上查找 id

标签 ruby-on-rails ruby mongodb aggregate mongoid

我在 MongoDB 上有客户集合。带有状态字段。可以有相同的 Id 字段。 我需要找到第一个更改的值,如“Guest”,并将其 Id 推送到名为“guests”的特定管道。 对于状态为“成员”的客户,我需要将另一个名为“成员”的管道推送给聚合管道“ guest ”中的 Id 等于 Id 的管道。 这样做是为了获取'guests'和'members'中的quantity元素。

其成员项:<​​/p>

{"_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 需要一个数组 (2)

我做错了什么? 对不起我的英语!

最佳答案

脸上的第二个表情没有看到第一个表情 需要删除

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

关于ruby-on-rails - 如何在创建方面运算符的数组上查找 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229432/

相关文章:

ruby - 十六进制转储到二进制 - xxd -r 等效

c# - Mongo 更新响应说没有更新文档,但是文档在那里

python - 如何处理 MongoDB (pyMongo) 中的 DuplicateKeyError?

ruby-on-rails - 安装json(1.8.6)时出错,Bundler无法继续

ruby-on-rails - 使用Warbler打包的Rails应用程序的日志在哪里?

ruby-on-rails - 如何限制 Rack 中的请求大小?

ruby-on-rails - 更改 ActiveRecord 子集上的 'ORDER BY' 链

java - MongoDb Spring 在嵌套对象中查找

ruby-on-rails - 如何从 rails 中的许多模型创建所有对象的数组

ruby-on-rails - Rails 在提供方法时覆盖 rel 属性