我使用Mongoose从MongoDB集合中提取一些数据。我只用我选择过的字段来取回我的对象数组。都好。这是我的代码:
var fieldsToReturn = 'username password';
User.find({username: {$exists: true}}, fieldsToReturn, {sort: {'created.when': 1}}, function(err, data){
if (err) {
return err;
} else {
// clever code needed here to manipulate the data!
return res.json(data);
}
});
我想要做的是遍历data
中返回的JavaScript对象数组,如果有密码(它将是一个文本字符串),用布尔值替换password
{ {1}},但如果它是true
,则返回布尔值null
。
我尝试了一些下划线.js魔术:
false
但我在JSON中收到的内容是_.each(data, function(element, index, list){
if (element.password !== null) {element.password = true};
});
和不是 "password":"true"
。还尝试了"password":true
。有什么建议吗?
答案 0 :(得分:0)
您可以使用map。
data = data.map(function(element) {
if (element.password) {
element.password = true;
}
return element;
});
var data = [
{
password: 'secret'
},
{
password: ''
},
{
password: 'swordfish'
}
];
data = data.map(function(element) {
if (element.password) {
element.password = true;
}
return element;
});
document.querySelector('pre').innerText = JSON.stringify(data);

<pre></pre>
&#13;
答案 1 :(得分:0)
尝试使用asyncjs lybrary。完成数组对象的所有执行后,它将调用回调函数。另请r ead carefully关于javascript(nodejs)中的异步流。
希望它有所帮助!!
//this should work if placed on your clever code and installed asyncjs
async.map(data, checkPassword, function(err, results){
//when arrived here, all the array has been checked and modified
console.log(results);
}
//Remember This function must be placed outside of the find() method.
function checkPassword(obj, callback)
{
if (obj.password) {
obj.password = true;
}
return callback(null, obj);
}
答案 2 :(得分:0)
它是猫鼬。在返回数据之前发生了一些事情,这使得它看起来像是直接的JSON,但如果您尝试在element
循环中操作_.each
,那么您正在处理的对象({{1} })isn&#39;简单对象映射到MongoDB中的文档。哪有Mongoose专家可以解释这个问题?
我要解决的问题是使用LoDash&#39; element
:
_.mapValues
然后在代码中:
function renderUserKeys(obj){
var newObj = _.mapValues(obj, function(n){return n});
if (newObj.password !== null) {newObj.password = true};
return newObj;
};
也许有一个更好的功能...
} else {
var newArray = [];
_.each(data, function(element, index, list){
newArray.push(renderUserKeys(element._doc)); // note the ._doc
});
return res.json(newArray);
};
(也许是_.mapValues
?)来执行复制,我需要调查一下,但是现在这个工作和我的Mongoose中间件是仍然正常运行(因为我使用_.merge
)。
经验教训:猫鼬!==鸭子。就像在,它可能看起来像一个对象,但当你尝试和操纵它时,它并没有像你期望的那样表现!