Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js mongoose从集合中的数组中查找数据_Javascript_Json_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 节点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",

我正在使用node.js和mongoose,我遇到了一个问题。我的用户集合看起来像

{
    "_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)
to
res.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 );
    })
} )