MongoDB-通过比较集合和对象的数组来返回现有字段的数组
MongoDB- Return Array of existing fields by compare collection with Array of object
我是Mongo的新手,正在尝试将数组与集合的文档进行比较,并返回匹配记录的列表。
让我解释一下:第一阵列
我有一个收藏(用户)与以下文件:
> db.user.find().pretty()
{
"_id" : ObjectId("57358220bf3e7d076b6ccdb1"),
"name" : "Sunny",
"phone" : "9417702107",
"email" : "ssdhiman07@gmail.com"
}
{
"_id" : ObjectId("57358242bf3e7d076b6ccdb2"),
"name" : "Pal",
"phone" : "9015719419",
"email" : "ss998@gmail.com"
}
{
"_id" : ObjectId("57358262bf3e7d076b6ccdb3"),
"name" : "viveky",
"phone" : "8826565107",
"email" : "sds998@gmail.com"
}
第二个数组:我有一个来自Http请求的对象数组,下面是数组的结构。
{
"contacts" : [
{
"name" : "Sunny",
"phone" : "9417702107"
},
{
"name" : "Sukhpal",
"phone" : "9015719419"
},
{
"name" : "anurag",
"phone" : "9988776655"
},
{
"name" : "vivek",
"phone" : "8826565107"
}
]
}
现在我想知道第二数组的哪些对象存在于第一数组话。结果,我想要与第二个数组相同的数组,但有一个额外的字段"existing":"true"或"existings":"false"。像这样的东西。
{
"contacts" : [
{
"name" : "Sunny",
"phone" : "9417702107"
"exists" :"true"
},
{
"name" : "pal",
"phone" : "90177668899"
"exists" :"false"
}
]
}
所以为此,我尝试了node.js和mongoos的代码。
exports.matchcontacts = function(req, res, next)
{
var response = {};
var conArray = req.body.contacts;
var contact_list = [];
for(var i=0; i<conArray.length;i++)
{
var name = conArray[i].name;
var phone = conArray[i].phone;
Users.findOne({"phone":conArray[i].phone},function(err,data)
{
if(err)
{
response = {"error" : true,"message" : "Error fetching data"};
}
else if(!data)
{
contact_list.push({name:name,phone:phone,exists:"false"});
}
else
{
contact_list.push({name:name,phone:phone,exists:"true"});
}
});
}
response = {"error":false,"contacts":contact_list};
res.json(response);
};
但总是得到null{}空结果,和如果我试图在回调函数内获得响应,那么它只返回最后一个比较值。问题在中第一个方法是回调函数很晚才返回结果,所以结果总是空的。在第二个方法循环覆盖结果中,在循环内部使用回调也效率低下,它将立即调用。所以整个故事我已经解释了
现在,请任何人帮助我编写代码或建议正确的方法来获得所需的结果,谢谢
我没有使用mongodb,但我使用的想法是首先迭代您的联系人,并将手机映射到相应的对象,并将其标记为不存在:
var obj = {};
for(var i=0; i<conArray.length;i++){
obj[conArray[i].phone] = conArray[i];
conArray[i].exists = false;
}
然后以某种方式搜索数据库中有这些手机的用户,比如
var results = Users.find(records that have phone in Object.keys(obj) array)
最后,您迭代现有记录并标记相应的联系人
for(var i=0;i<results.length;i++){
obj[results[i].phone].exists = true;
}
相关文章:
- 对象数组返回自最近日期以来的最高总体值
- 从多维数组返回嵌套数组
- 为什么当我点击<a>使用纯javascript;这个“;返回url,数组返回“url”;未定义”;
- 带多维数组返回字符串的json_encode;阵列”;而不是数据
- 如何将 AJAX 响应作为 JavaScript 数组返回
- 我正在尝试在 JS 中制作这个随机名称生成器.数组返回未定义
- .push() 多个对象进入 JavaScript 数组返回 'undefined'
- 如何按属性从可观察数组返回项
- 通过jquery发送的关联php数组返回[对象对象]
- 从 Javascript 中的对象数组返回单个属性的数组
- 循环遍历对象数组返回“未定义”
- 拼接数组返回空的序列
- Javascript 多维数组返回第一个值,然后失败
- Json 数组返回空值
- 从下划线.js中的数组返回一系列值
- for 语句不从数组返回值
- MongoDB从数组返回特定字段
- 试图将数组返回到表中的列表中
- Javascript中的二维数组返回未定义的数组
- 将函数数组作为布尔值数组返回