0

我有端運行的MongoDB的版本3.2.6實例兩個集合:

  • ManufacturerDevices
  • 製造商

我使用集合函數來加入他們的行列:

db.ManufacturerDevices.aggregate([ 
     { $lookup: { 
     from: 'Manufacturers', 
     localField: 'manufacturer_id', 
     foreignField: '_id', 
     as: 'manufacturer', 
     }}, 

     { $project: { 
     _id: true, 
     name: true, 
     images: true, 
     device_id: true, 
     device_name: true, 
     // Returns an array 
     manufacturer_name: "$manufacturer.manufacturer_name", 

     }}, 

     { $limit: 1 } 
]); 

這可以作爲EXPEC特德,除了manufacturer_name正在返回作爲[數組],我期待一個字符串。

這是導致我的問題是稍遠一點的路線,在這裏我想串聯device_namemanufacturer_name進入一個新的領域被稱爲'complete_device'

complete_device: { 
    $concat: [ 
     "$manufacturer.manufacturer_name", 
     "$name" 
    ] 
} 

不出所料這將返回錯誤

「errmsg」:「$ concat只支持字符串,不支持Array」。

我曾嘗試使用$slice函數返回的"$manufacturer.manufacturer_name" 0索引值:

{$slice: ["$manufacturer.manufacturer_name", 1]} 

不過這也返回數組,導致同樣的錯誤。

如何在我的$cat邏輯中使用/返回"$manufacturer.manufacturer_name"作爲字符串使用?

+0

您還可以使用{$開卷:「$製造商」}轉換數組對象,然後CONCAT –

回答

2

使用$ arrayElemAt操作

所以您的查詢應該是

complete_device: { 
    $concat:[ 
     { 
     $arrayElemAt:[ 
      "$manufacturer.manufacturer_name", 
      0 
     ] 
     }, 
     "$name" 
    ] 
} 
+0

許多感謝的人,作品魅力:) –

+0

ps我做了upvote,但唉,我的priviliages是noob地位! –

+0

@ZaidCrowe您不一定需要任何特權才能接受答案。您可以通過點擊複選標記來考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – chridam