gpt4 book ai didi

mysql - 如何在mongodb上对用户数据进行分组

转载 作者:行者123 更新时间:2023-11-29 21:11:48 25 4
gpt4 key购买 nike

我正在尝试从 monogo 数据库订购结果,这与 mysql 中的结果相同。

SELECT * FROM `test` WHERE user1 = 'josieboy' or user2='josieboy' GROUP by user1, user2

这是我的 mongoDB 查询:

var query = Chat.aggregate(
{
$match:{
$or:[
{'user1':data},
{'user2':data}
]
}
},
{
$group : {
_id: '$user1',
receiver : { $first: '$user1' },
sender : { $first: 'user2' }
}
},
{
$project : {"_id":0, "user1":1, "user2":1}
}
);

查询返回的结果超出了预期:

返回结果

id   user1    user2   消息

1   弗雷德·乔西博伊    嗨
2    josieboy Fred    太棒了
3   雷切尔·乔西博伊    嗨

预期结果

id   user1   user2    消息

2    josieboy    Fred   太棒了
3   雷切尔    josieboy    嗨

我希望返回 Fred 和 Josieboy 的单个匹配项,无论返回的行数以及最新 ID 和最新消息的 user1 或 user2 订单是谁。

如果更新查询可以在 mongodb 中,我也会很高兴...

谢谢

最佳答案

它又长又丑,但我认为它可以满足你的要求:

db.test.aggregate({
$match: {
$or: [{
'user1': data
}, {
'user2': data
}]
}
}, {
$project: {
user1: 1,
user2: 1,
Message: 1,
users: ["$user1", "$user2"]
}
}, {
$unwind: "$users"
}, {
$redact: {
$cond: {
if: {
$eq: ['$users', data]
},
then: '$$PRUNE',
else: '$$KEEP'
}
}
}, {
$group: {
_id: '$users',
__id: {
$last: '$_id'
},
user1: {
$last: '$user1'
},
user2: {
$last: '$user2'
},
Message: {
$last: '$Message'
}
}
}, {
$project: {
_id: '$__id',
user1: 1,
user2: 1,
Message: 1
}
})

关于mysql - 如何在mongodb上对用户数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com