我ChatRooms在 MongoDB 中有一組具有以下(簡化)結構的檔案:
{
_id: ObjectId('4654'),
messages: [
{
user: ObjectId('1234'),
sentAt: ISODate('2022-03-01T00:00:00.000Z')
},
{
user: ObjectId('1234'),
sentAt: ISODate('2022-03-02T00:00:00.000Z')
},
{
user: ObjectId('8888'),
sentAt: ISODate('2022-03-03T00:00:00.000Z')
},
]
}
我想要實作的是過濾管道messages內的陣列aggregate,以便獲得一個userId僅存在一次的陣列。我正在尋找的結果是(或類似的東西,但陣列不應該有兩個具有相同userid 的元素):
{
_id: ObjectId('4654'),
messages: [
{
user: ObjectId('1234'),
sentAt: ISODate('2022-03-01T00:00:00.000Z')
},
{
user: ObjectId('8888'),
sentAt: ISODate('2022-03-03T00:00:00.000Z')
},
]
}
這樣的事情甚至可能嗎?任何幫助將非常感激。
uj5u.com熱心網友回復:
您可以通過幾種不同的方式執行此操作,以下是如何使用$reduce運算子實作此目的的示例:
db.collection.aggregate([
{
$addFields: {
messages: {
$reduce: {
input: "$messages",
initialValue: [],
in: {
$cond: [
{
$in: [
"$$this.user",
"$$value.user"
]
},
"$$value",
{
"$concatArrays": [
"$$value",
[
"$$this"
]
]
}
]
}
}
}
}
}
])
蒙戈游樂場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/465635.html
標籤:javascript mongodb 表示 猫鼬
下一篇:資料庫結構常量
