我在 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/