gpt4 book ai didi

javascript - MongoDB-通过将集合与对象数组进行比较来返回现有字段的数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:05 24 4
gpt4 key购买 nike

我是 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"
}
]
}

现在我想知道第二个数组的哪些对象存在于第一个数组中,哪些不存在。比较应仅基于电话。结果我想要与第二个数组相同的数组,但有一个额外的字段,即"exists":"true"或 "exists":"false"。像这样的东西。

{
"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);
};

但总是得到 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;
}

关于javascript - MongoDB-通过将集合与对象数组进行比较来返回现有字段的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37216118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com