2016-07-02 50 views
1

我只是試圖返回所有文檔(網站),其中req.user._id被發現,在一個子文檔(管理器)數組。如何返回在數組中找到值的文檔? Mongoose.js

用戶可以管理多個站點,所以我需要一種方法來列出所有這些關聯的站點。

Site.find({}).elemMatch('managers', {_id: req.user._id}).exec((err, sites) => { 
    if (err) { 
    console.log(err) 
    return res.status(500).send('Something went wrong'); 
    } 
    return res.json(sites) 
}); 

我已經試過Mongoose elemMatch沒有運氣。 我無法在任何地方找到這個文檔,但它看起來像一個簡單的查詢運行。

(編輯),下面是一個簡單模式和DOC:

import mongoose from 'mongoose'; 

var Schema = mongoose.Schema; 
const SiteSchema = new Schema({ 
    city: { 
      type: String 
    }, 
    siteRef: { 
      type: String 
    }, 
    managers: [{ 
      type: Schema.ObjectId, 
      ref: 'User' 
    }], 
}); 


export default mongoose.model('Site', SiteSchema); 

回答

1

ElemMatch不會是這樣做的最好的查詢方法,因爲你正試圖爲您查詢subdocment內到達。

我相信你正在尋找mongoose populate

嘗試這樣:

Site.find().populate('managers', null, req.user._id).exec((err, managers) => { 
    if (err) { 
     return (err) 
    } 
    return res.json(sites) 
}); 

爲了更好地理解什麼的例子發生的樣子,他們提供:你的情況

Kitten.find().populate({ 
    path: 'owner' 
    , select: 'name' 
    , match: { color: 'black' } 
    , options: { sort: { name: -1 }} 
}).exec(function (err, kittens) { 
    console.log(kittens[0].owner.name) // Zoopa 
}) 

// alternatively 
Kitten.find().populate('owner', 'name', null, {sort: { name: -1 }}).exec(function (err, kittens) { 
    console.log(kittens[0].owner.name) // Zoopa 
}) 

「路徑」是「經理人」和你正在返回「req.user._id」與模型中的任何字段匹配的所有網站。

相關問題