2017-02-27 72 views
0

這看起來像一個模糊的問題,但我會盡力解釋我能做到的最好的。作爲一個方面說明,我是很新的使用貓鼬:)將貓鼬陣列值連接到一個唯一的ID

我有一個貓鼬型模式存儲不同的值,爲每個用戶,像這樣......

let userSchema = mongoose.Schema({ 
    user: { type: String, required: true, unique: true }, 
    pass: { type: String, required: true }, 
    files: [{ type: String, required: false }], 
}); 

「文件」 - 鍵包含值的數組,可以說,例如:

userSchema.files = [value1, value2, value3] 

而且我希望每個值將被連接到某種ID的,所以,當我調用指定的ID,我得到指定的值。只是爲了演示的目的,它可能是這個樣子:

userSchema.files = [{value:value1, id: id1}, 
        {value:value2, id: id2}, 
        {value:value3, id: id3}] 

然後我想找到指定的ID,並請求返回它的「價值」 - 鍵:

router.route("/home/:id") 
    .get(restrict, function(req, res) { 

     User.findOne({ user: req.session.Auth.username }, function(error, data) { 
      data.files.forEach(function(file) { 
       if (file.id === req.params.id) { 
       response.render("../home", file.value) 
       } 
      } 
     }); 
    }); 

我怎樣才能做這個?試圖推送一個對象到文件,但沒有按預期工作。閱讀一些關於ObjectId的內容,但不太明白。 任何提示?

+0

你是否正確地獲得了'數據'?您是否遇到插入或檢索問題? – RaR

+0

@RaR我正在面臨插入問題! – Jesper

+0

你有什麼嘗試?插入代碼在哪裏? – RaR

回答

0

我認爲你只需要創建一個文件一個獨立的模型,並使用「裁判」關鍵字把它連接到您的用戶模式:

let fileSchema = mongoose.Schema({ 
    _id  : Number, 
    value : String 
}); 

let userSchema = mongoose.Schema({ 
    user: { type: String, required: true, unique: true }, 
    pass: { type: String, required: true }, 
    files: [{ type: Number, ref: 'File' }] 
}); 

let User = mongoose.model('User', userSchema); 
let File = mongoose.model('File', fileSchema); 

let f1 = new File({ _id: 1, value: 'File 1'}); 
let f2 = new File({ _id: 2, value: 'File 2'}); 
let f3 = new File({ _id: 3, value: 'File 3'}); 

let user1 = new User({user:'chuck', pass:'norris'}); 
user1.files.push(f1); 
user1.files.push(f2); 
user1.files.push(f3); 

user1.save(function(err){ }); 

我們取回數據:

User 
.findOne({ user: 'chuck' }) 
.populate('files') // only works if we pushed refs to children 
.exec(function (err, user) { 
    if (err) return handleError(err); 
    console.log(user); 
    //you can now loop through user.files and compare _id 
    user.files.forEach(function(file) { 
     if (file._id === req.params.id) { 
     response.render("../home", file.value) 
     } 
    } 
}); 

你可以在這裏閱讀關於貓鼬的參考人口:http://mongoosejs.com/docs/populate.html

+0

謝謝,我做了就在你回答之前,現在它完美地工作。更好的設計也:) – Jesper