簡體   English   中英

為什么我的 mongodb nodejs 驅動程序對聚合 $lookup 的查詢沒有按預期返回結果

[英]Why does my mongodb nodejs driver query on aggregate $lookup not return results as expected

我有兩個 collections: usersroles

用戶分配了一系列角色:

{
    _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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM