我正在尝试从monogo数据库中订购结果,这在mysql中是等效的。
set -e
这是我的mongoDB查询:
SELECT * FROM `test` WHERE user1 = 'josieboy' or user2='josieboy' GROUP by user1, user2
查询返回的结果超过预期结果:
返回结果
id user1 user2留言
1 fred josieboy HI
2 josieboy fred Wts up
3 racheal josieboy HI
预期结果
id user1 user2留言
2 josieboy fred Wts up
3 racheal josieboy HIy
我想为Fred和Josieboy返回一个匹配,无论返回的行数是多少,最新的id和最新消息是user1或user2的顺序。
如果更新查询可以在mongodb中,我也会很高兴...
感谢
答案 0 :(得分:0)
它长而丑,但我认为你想要的是什么:
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
}
})