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