在现有的猫鼬收藏中找到

时间:2018-04-19 08:02:40

标签: mongoose

我是猫鼬新手。我正在研究MEAN angular 2应用程序。我已经创建了基本设置,需要开始使用MEAN angular 2应用程序。

  1. 我有model文件夹,其中定义了模型架构。我已将其正确导出以便在其他地方访问。
  2. 我有routes文件夹,我正在注册api调用以将数据保存到数据库。我最后会返回路由器。
  3. 在我的服务器app.js或index.js上,我引用了bodyparser和express,mongoose并连接到了mongoose。注册的api路线等。

  4. 我正在使用POSTMAN对此进行测试。

  5. 以下是创建集合的一条路线

    const testModel= require('../models/testModel');
    
    module.exports = (router) => {
    
        router.post('/Update', (req, res) =>{
    
            console.log(req.body);
    
            let tModel= new testModel({
                a: req.body.a,
                 key1:{
                    b: req.body.b,                
                    key2: {
                      c: req.body.c,                     
                      key3: {
                        x: req.body.x                     
                      }
                    }
                 }      
            });
    
            tModel.save((err) =>{
                if(err){
                    res.json({success : false, message: 'Could not update details. Error:'+ err});
                }else{
                    res.json({success: true, message: 'details updated'});
                }
            });
    
        });
    }
    

    问题陈述:

    在上述路线之后,我又写了一条路线来从同一个集合中获取数据。当我传递多个参数时,这不起作用。下面是代码片段。

    const testModel= require('../models/testModel');
    router.get('/getDetails', (req,res) => {
    
                 testModel.find({'a': '1', 'b' : '2', 'c': '3'}).exec(function(err, data) {
                        if(err){
                            res.json({success: false, messsage : 'Could not get the details. Error:' + err})
                        }
                        else{
                            res.send(data);
                        }
    

    但没有参数或一个参数我在使用POSTMAN测试时得到了结果。

    const testModel= require('../models/testModel');
    router.get('/getDetails', (req,res) => {
                 console.log("req body::" + JSON.stringify(req.body));
                 testModel.find().exec(function(err, data) {
                        if(err){
                            res.json({success: false, messsage : 'Could not get the details. Error:' + err})
                        }
                        else{
                            res.send(data);
                        }
    

    请帮助。

1 个答案:

答案 0 :(得分:1)

您运行错误的过滤器以查找文档。

{'a': '1', 'b' : '2', 'c': '3'}

问题出在您的模型对象中,您将b定义为key1c的其他属性的属性,作为key1.key2.c的属性,依此类推和x一样。

{
            a: req.body.a,
             key1:{
                b: req.body.b,                
                key2: {
                  c: req.body.c,                     
                  key3: {
                    x: req.body.x                     
                  }
                }
             }      
        }

使用提供的过滤器,mongoDB不返回任何对象,因为它没有对象,其中b和c是对象的直接属性。

您可以尝试关注过滤器,看看这是否适合您。

{
 "a" : 1,
 "key1.b":2,
 "key1.key2.c": 3 
}