![](/img/trans.png)
[英]Promise from aggregate() and find() with MongoDB driver for NodeJS
[英]Why does my mongodb nodejs driver query on aggregate $lookup not return results as expected
我有兩個 collections: users
和roles
用戶分配了一系列角色:
{
_id : 61582a79fd033339c73ee290
roles:[615825966bc7d715021ce8fc, 615825966bc7d715021ce8fd]
}
角色:
[
{
_id: 615825966bc7d715021ce8fc
name: 'user',
},
{
_id: 615825966bc7d715021ce8fd
name: 'admin',
},
]
如您所見,用戶有一個與角色對應的 object id 數組。
我有一個 $lookup 聚合查詢,我試圖在其中返回所有填充了角色的用戶:
dbManager.aggregate = async () => {
let a = dbInstance.collection('users').aggregate(
[
{
$lookup:
{
from: 'roles',
localField: 'roles',
foreignField: '_id',
as: 'user_roles'
}
}
]
)
console.log('a:::::::', a)
}
當我運行此查詢時: dbManager.aggregate()
,我得到一個非常大的 object 並且我在任何地方都看不到用戶信息,也看不到如何提取它。 根據文檔,這應該返回我正在查詢的信息。 這是它返回的前幾個字段,因為我不想被巨大的 object 淹沒:
AggregationCursor {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
[Symbol(kCapture)]: false,
[Symbol(topology)]: Topology {
_events: [Object: null prototype] {
topologyDescriptionChanged: [Array],
}
...
}
我究竟做錯了什么?
顯然我必須調用.toArray
返回解析數據的 promise:
dbManager.aggregate = async () => {
let a = await dbInstance.collection('users').aggregate(
[
{
$lookup:
{
from: 'roles',
localField: 'roles',
foreignField: '_id',
as: 'user_roles'
}
}
]
)
.toArray().then(data => data)
.catch(e => console.log(e))
console.log('a:::::::', a)
}
頁面上沒有任何地方說要在 MongoDB 文檔中執行此操作,這有點糟糕,但很高興我能找到解決方案!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.