我是新来的Mongo,并试图比较一个数组与收集文件并返回匹配记录列表。MongoDB-通过比较集合与对象数组的比较集合返回Array的现有字段
让我解释一下:第一个数组
我有一个集合(用户)提供以下文件:
> db.user.find().pretty()
{
"_id" : ObjectId("57358220bf3e7d076b6ccdb1"),
"name" : "Sunny",
"phone" : "9417702107",
"email" : "[email protected]"
}
{
"_id" : ObjectId("57358242bf3e7d076b6ccdb2"),
"name" : "Pal",
"phone" : "9015719419",
"email" : "[email protected]"
}
{
"_id" : ObjectId("57358262bf3e7d076b6ccdb3"),
"name" : "viveky",
"phone" : "8826565107",
"email" : "[email protected]"
}
第二个数组:我有对象的数组,它是来自的Http下面的请求是数组的结构。
{
"contacts" : [
{
"name" : "Sunny",
"phone" : "9417702107"
},
{
"name" : "Sukhpal",
"phone" : "9015719419"
},
{
"name" : "anurag",
"phone" : "9988776655"
},
{
"name" : "vivek",
"phone" : "8826565107"
}
]
}
现在我想知道第二个数组的哪些对象是存在于第一个数组,哪些不是。只能比较电话。结果我想要第二个数组相同的数组,但有一个额外的字段是 “存在”:“真”或“存在”:“假”。像这样的东西。
{
"contacts" : [
{
"name" : "Sunny",
"phone" : "9417702107"
"exists" :"true"
},
{
"name" : "pal",
"phone" : "90177668899"
"exists" :"false"
}
]
}
所以为了这个,我曾在这里尝试的东西是mongoos Node.js的代码。
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);
};
但总是得到空{}空的结果,和如果我试图让回调函数内响应,那么它仅返回单个去年相比价值。 问题在第一个方法是回调函数返回结果很晚所以结果总是空的。 和第二种方法循环覆盖结果,它也没有效率使用循环内部的回调它将调用no的时间。所以整个故事,我曾解释
现在请任何人可以帮助我的代码或建议权的方式来获得期望的结果得益于
从来没有使用MongoDB的,但不容您在您的数据库中的所有这些手机的手机的数组,搜索(Users.find我相信)并一次处理所有内容?这样你只需要管理一个回调 – juvian
@juvian我很欣赏你的建议,并且我已经在**运算符中使用了** $,但它返回了所有匹配结果(整个文档数据)。但是怎样才能知道哪些记录没有找到,并准备有**存在**的字段。和一个更多的东西(用户集合)“名称”谷和**第二阵列**“名称”字段值可以不同。所以我想要名称值相同**第二阵列**不是从数据库。 –
'Array.prototype.findIndex()'和'Array.prototype.find()'是你在这个任务中的朋友。 – Redu