我遇到了嵌入式文檔的怪異行爲,我不知道我是否做錯了什麼,或者它是一個錯誤。爲什麼貓鼬用「[object Object]」替換子文檔?
這是我的模型:
var mg = require('mongoose')
, S = mg.Schema;
var subject = new S({
name: String
, properties: [{
name: String
, value: String
}]
});
module.exports = mg.model('Subject',subject);
當我嘗試添加一個屬性,它在某種程度上被轉化爲"[object Object]"
:
console.log(req.body); // --> { name: 'height', value: 120 }
console.log(typeof req.body); // --> object
ob.Subject.findByIdAndUpdate(req.params.id, {$push: {properties: req.body}}, function(err, doc) {
if(err) throw err;
res.send(doc);
});
返回doc
是:
{_id: '...', name: 'sss', properties:[ "[object Object]" ]}
我用mongo CLI檢查數據庫中的文檔,並輸入正確的值你在裏面。
//the document as seen in mongo CLI:
{
_id: '...', name: 'sss',
properties: [ "[object Object]", {name: "aaa", value: "bar"} ]
}
然後我嘗試這樣的:
ob.Subject.findById(id, function(err, doc) {
res.send(doc);
}
然後返回的文檔是:
{
_id: '...', name: 'sss',
properties:[ "[object Object]", "[object Object]" ]
}
我認爲,正在發生的事情是貓鼬莫名其妙的子文檔轉換成此字符串。此外,我不認爲這是我的,還是res.send()
故障原因:
- 我不使用
toJson
或toObject
明確,我不處理在所有 res.send()
JSON的轉換不是問題因爲即使我util.inspect
的價值 - 這是相同的- 無效的轉換似乎發生在兩種寫入和通過貓鼬
看你有沒有遇到過類似的行爲?有沒有辦法解決這個問題?
我剛開始使用貓鼬,並沒有一個想法如何備用到MongoDB本地更新和獲取文件,並檢查這種行爲是否仍然存在(我懷疑)。
任何有用的提示讚賞:)
同樣在這裏。我發現,如果你將你的子文檔定義爲一個Schema,就像var subject = new S({0121} 然後它工作正常... 對我來說看起來不太正確,因爲我將它定義爲一個對象,因爲只需要一個實例(不是集合),並結束必須使用模式數組,因爲模式只能嵌套在Mongoose中,如果您將它們嵌入到數組中,您是否找到了更適當的解決方案? – Javo 2013-04-18 11:54:20
'有沒有辦法解決?' - 是的,它被稱爲[bug報告](https://github.com/learnboost/mongoose/issues)。 – inf3rno 2014-09-05 02:44:54