我有這種名為“訊息”的集合
[
{
_id: new ObjectId("62641aea1fbe19349f8fba78"),
text: 'Hello',
user: new ObjectId("625b8f00e2464fb758263b4d"),
receiver: new ObjectId("62638d3e5bcd98e7e48ca1b7"),
createdAt: 2022-04-23T15:27:38.270Z,
updatedAt: 2022-04-23T15:27:38.270Z,
__v: 0
},
{
_id: new ObjectId("6264256fc0ee5093f8d994a0"),
text: 'Hi',
user: new ObjectId("62638f1495b841266161b032"),
receiver: new ObjectId("62638d3e5bcd98e7e48ca1b7"),
createdAt: 2022-04-23T16:12:31.155Z,
updatedAt: 2022-04-23T16:12:31.155Z,
__v: 0
},
{
_id: new ObjectId("62642dc05318104caabbdecc"),
text: 'Hi',
user: new ObjectId("625b8f00e2464fb758263b4d"),
receiver: new ObjectId("62638d3e5bcd98e7e48ca1b7"),
createdAt: 2022-04-23T16:48:00.416Z,
updatedAt: 2022-04-23T16:48:00.416Z,
__v: 0
}
]
這里用戶是發送者和另一個接收者。如果我的用戶 id 是"myId",我想檢索我的訊息物件的用戶和接收者的不同組合,這意味著條件為user == myID 或 receiver == myId。
預期值。
[
{
user: new ObjectId("625b8f00e2464fb758263b4d"),
receiver: new ObjectId("62638d3e5bcd98e7e48ca1b7")
},
{
user: new ObjectId("62638f1495b841266161b032"),
receiver: new ObjectId("62638d3e5bcd98e7e48ca1b7")
}
]
所以我是 MongoDB 的新手,有什么可能的方法嗎?還是我錯過了什么?
uj5u.com熱心網友回復:
歡迎 Sandeep Vithanage,你可以這樣做:
db.collection.aggregate([
{
$match: {
$or: [
{
user: myId
},
{
receiver: myId
}
]
}
},
{
$group: {
"_id": {
user: "$user",
receiver: "$receiver"
}
}
},
{
$replaceRoot: {
"newRoot": "$_id"
}
}
])
如您所見,在操場上作業。這是一個聚合管道。第一步是匹配您要求的案例。第二個是按用戶和接收者的組合對它們進行分組。第三個只是格式化。
uj5u.com熱心網友回復:
使用 $match 和 $project 如下:
await Model.aggregate([{
$match: {
$or: [
{user: 'myid'},
{receiver: 'myid'}
] }
},
$project: {user: 1, receiver: 1}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/465387.html
標籤:节点.js mongodb 猫鼬 mongodb查询 聚合框架
下一篇:訪問架構默認值
