假設我有這個 MongoDB 檔案:
{
"_id": {
"$oid": "628f739398580cae9c21b44f"
},
"place":"Amsterdam",
"events": [
{
"eventName": "Event one",
"eventText": "Event",
"eventDate": "010101"
"host":"Bob"
},
{
"eventName": "E2",
"eventText": "e2",
"eventDate": "020202"
"host":"John"
}
]
}
{
"_id": {
"$oid": "628f739398580cae9c21b44f"
},
"place":"London",
"events": [
{
"eventName": "e3",
"eventText": "e3",
"eventDate": "010101",
"host":"Bob"
}
]
}
我想獲得 Bob 主持的一系列事件,我該怎么做?我試過這樣使用$elemSelector:
const result = await mongoDatabase
.collection("temp")
.find({ events: { $elemMatch: { eventName: "E2" } } })
.toArray();
console.log(JSON.stringify({ result }));
但它只是回傳與所選位置相同的所有事件,在這種情況下是阿姆斯特丹。
想要的結果:
{
"eventName": "Event one",
"eventText": "Event",
"eventDate": "010101"
"host":"Bob"
},
{
"eventName": "e3",
"eventText": "e3",
"eventDate": "010101",
"host":"Bob"
}
uj5u.com熱心網友回復:
看一下這個
db.collection.aggregate({
$unwind: "$events"
},
{
$match: {
"events.host": "Bob"
}
},
{
"$project": {
"events": 1,
"_id": 0
}
},
{
"$replaceRoot": {
"newRoot": "$events"
}
})
你可以在這里玩更多的測驗資料:https ://mongoplayground.net/p/A1UbZdZgZmr
uj5u.com熱心網友回復:
您可以通過簡單的管道階段來實作
db.collection.aggregate([
{
"$match": {//Match
"events.host": "Bob"
}
},
{
"$project": {
"e": {
"$filter": {//Filter matching elements
"input": "$events",
"as": "event",
"cond": {
"$eq": [
"$$event.host",
"Bob"
]
}
}
}
}
}
])
操場
uj5u.com熱心網友回復:
以下結構可以通過在 MongoDB 中使用投影查詢來實作,上述一個清晰的解決方案可以是這個
db.collection("temp").find({ "events":{ $elemMatch:{ "eventName":"e3" } } }, {"events":1,"_id":0})
uj5u.com熱心網友回復:
試試這個。
db.getCollection('events_or_whatever_u_').find({'_id': ObjectId('xxxxx')})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/482938.html
上一篇:如何計算用戶在網站上花費的時間?
