0
在我的路由中,我試圖在將數據發送到我的視圖前從數據庫中取代任何值。在將路由發送到視圖(Node js)之前,無法從路由中更改MongoDB/MongooseJS的結果 - 已解決
在這種情況下,我試圖用用戶名替代用戶的引用。但我的console.log只是不斷的返回值。
app.get('/message/inbox', function(req, res) {
var _id = req.user._id;
var inbox = null;
var users = null;
async.parallel([
function(callback){
Inbox.find({to: _id}, callback);
},
function(callback){
User.find({}, callback);
}
],
function(err, result){
inbox = result[0];
users = result[1];
for(var i = 0; i < inbox.length; i++) {
for(var j = 0; j < users.length; j++) {
if(String(inbox[i].from) == String(users[j]._id)) {
inbox[i].from = users[j].local.username;
console.log(users[j].local.username);
console.log(inbox[i].from);
break;
}
}
}
console.log(inbox);
});
});
這是我的控制檯回報:
[email protected]
540468daeb56d5081ade600d
[ { _id: 54084cacf212815422aabe94,
from: 540468daeb56d5081ade600d,
to: 5406bf4c8a8acc88120922dc,
headline: 'Some Headline',
text: 'Some text',
__v: 0 } ]
SOLUTION
找到了解決辦法。我只需要在.find之後添加一個.lean()。這告訴貓鼬來傳遞數據作爲一個JavaScript對象,而不是一個MongooseDocument - Scource
app.get('/message/inbox', function(req, res) {
var _id = req.user._id;
var inbox = null;
var users = null;
async.parallel([
function(callback){
Inbox.find({to: _id}, callback).lean();
},
function(callback){
User.find({}, callback).lean();
}
],
function(err, result){
inbox = result[0];
users = result[1];
for(var i = 0; i < inbox.length; i++) {
for(var j = 0; j < users.length; j++) {
if(String(inbox[i].from) == String(users[j]._id)) {
inbox[i].from = users[j].local.username;
console.log(users[j].local.username);
console.log(inbox[i].from);
break;
}
}
}
console.log(inbox);
});
});
我發現這個解決方案的其他地方,但它一直返回「沒有辦法」toObject'「 – 2014-09-05 08:32:47
@JesperNielsen那麼爲什麼要改變你的標題爲(解決)?它可以工作,也可以不工作 – 2014-09-05 08:36:53
@NielLunn - 看看我更新的帖子。我找到了自己的解決方案。 – 2014-09-05 10:23:14