Javascript 节点js mongoose从集合中的数组中查找数据
我正在使用node.js和mongoose,我遇到了一个问题。我的用户集合看起来像Javascript 节点js mongoose从集合中的数组中查找数据,javascript,json,node.js,mongodb,mongoose,Javascript,Json,Node.js,Mongodb,Mongoose,我正在使用node.js和mongoose,我遇到了一个问题。我的用户集合看起来像 { "_id": ObjectId("564b6deec50de8d827c0a51a"), "email": "ak@gmail.com", "ngos": [ { "_id": ObjectId("564b7527ecc479e4259edff7"), "name": "Children trust",
{
"_id": ObjectId("564b6deec50de8d827c0a51a"),
"email": "ak@gmail.com",
"ngos": [
{
"_id": ObjectId("564b7527ecc479e4259edff7"),
"name": "Children trust",
},
{
"_id": ObjectId("564b79e0ecc479e4259edff8"),
"name": "Charity Two",
"location": "Australia"
}
]
}
{
"_id": ObjectId("564e0a18c8cd4b5420a9250c"),
"email": "some@gsomel.com",
"ngos": [
{
"_id": ObjectId("564e0b3bc8cd4b5420a92510"),
"name": "Charity Two",
"location": "US"
}
]
}
我想找到所有的非政府组织
,它们的名字像慈善机构
,所以它应该会返回给我
{
"_id": ObjectId("564e0b3bc8cd4b5420a92510"),
"name": "Charity Two",
"location": "US"
}
{
"_id": ObjectId("564e0b3bc8cd4b5420a92510"),
"name": "Charity Two",
"location": "Australia"
}
我试过了
User.find({"ngos.name": new RegExp(name, 'i')}, function(err, user) {
if (err) return next(err);
res.json(user);
});
当我返回用户时,它给了我两个用户所有的数据,但是如果我更改res.json(user)
tores.json(user.ngo)代码>我没有得到任何回应
我怎样才能检索那些名字匹配的非政府组织
感谢您对最终结果数组使用正则表达式过滤,如下所示:
var rgx = new RegExp(name, 'i');
User.find({"ngos.name": rgx})
.lean()
.exec(function(err, users) {
if (err) return next(err);
var result = users.map(function (n){
return n.ngos.filter(function(val){return rgx.test(val.name);});
})
console.log(JSON.stringify(result, undefined, 4));
res.json(result);
});
查看下面的演示
var游标=[
{
“非政府组织”:[
{
“_id”:“564b7527ecc479e4259edff7”,
“姓名”:“子女信托”,
},
{
“_id”:“564b79e0ecc479e4259edff8”,
“名称”:“慈善一号”,
“地点”:“澳大利亚”
}
]
},
{
“非政府组织”:[
{
“_id”:“564e0b3bc8cd4b5420a92510”,
“姓名”:“慈善二号”,
“地点”:“美国”
}
]
}
];
var rgx=new RegExp('Charity','i');
var result=cursor.map(函数(n){
返回n.ngo.filter(函数(val){return rgx.test(val.name);});
})
pre.innerHTML=“result:+JSON.stringify(result,null,4)代码>
希望这有帮助
User.find({"ngos.name": new Regex(name, 'i')},{'ngos':1}).exec(function(err,data){
if (err) throw(err);
res.json(data);
});
在猫鼬身上试试这种方法
你得到的是数组,所以使用“forEach”
})
在mongodb中试试这种方式
db.user.find({'ngos.name':new RegExp('name', 'i')},{'ngos':1}).forEach( function(user) {
user.ngos.forEach( function(nom) {
print( nom );
})
} )
我想这对你有帮助 文档说它限制了生成的数组,我不想限制我想要所有具有该名称的NGO,如果我删除{“NGO.$”:1,“\id”:0}
,它也给了我所有不包含字符串的NGO。@singhakash在这种情况下,您需要对最终数组进行一些正则表达式过滤,正如在我更新的答案中一样。谢谢,它通过从返回n.ngo.filter(函数(val){return rgx.test(val.name);})[0]中删除[0]对我起到了作用代码>因为如果我搜索的是Ch
它给了2个非政府组织,而不是所有的3个非政府组织。@singhakash太棒了!我已经更新了我的答案以反映这一点,如果你能将答案标记为已接受,那将非常好,尽管这样做没有义务,谢谢:)是的。如果将响应更改为res.json(user.ngo),它将无法工作。您应该在视图中迭代用户对象。您能否将响应发送到哪个视图的代码发布到哪个视图。以便可以在视图中迭代用户对象。
db.user.find({'ngos.name':new RegExp('name', 'i')},{'ngos':1}).forEach( function(user) {
user.ngos.forEach( function(nom) {
print( nom );
})
} )