Ruby on rails 如何在数组上查找由facet操作符创建的ID
我在MongoDB上收集客户。带有状态字段。可以具有相同的Id字段。 我需要找到第一个更改的值,如“Guest”,并将其Id推送到名为“guests”的特定管道。 和状态为“成员”的客户,我需要从聚合管道“来宾”中推送另一个名为“成员”的管道,其Id等于Id。 这样做是为了获得“来宾”和“成员”中的数量元素 其成员项目:Ruby on rails 如何在数组上查找由facet操作符创建的ID,ruby-on-rails,ruby,mongodb,aggregate,mongoid,Ruby On Rails,Ruby,Mongodb,Aggregate,Mongoid,我在MongoDB上收集客户。带有状态字段。可以具有相同的Id字段。 我需要找到第一个更改的值,如“Guest”,并将其Id推送到名为“guests”的特定管道。 和状态为“成员”的客户,我需要从聚合管道“来宾”中推送另一个名为“成员”的管道,其Id等于Id。 这样做是为了获得“来宾”和“成员”中的数量元素 其成员项目: {"_id"=>{"$oid"=>"5ce2ecb3ad71852e7fa9e73f"}, "status"=>"member",
{"_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