【问题标题】:finding on composite key is not giving any result mongo db MEAN stack nodejs [duplicate]在复合键上查找没有给出任何结果 mongo db MEAN stack nodejs [重复]
【发布时间】:2017-10-30 06:56:45
【问题描述】:

我已经阅读了一些关于堆栈溢出的解决方案,但没有一个适合我的情况。

我的mongo db集合_id是如下图的复合键,

Mongo db 应用程序集合

{
"_id" : {
    "appId" : 1,
    "name" : "my app"
},
"dataLoaded" : true,
"__v" : 0
}

我的代码(给出空结果)

app.get('/api/application',function(req,res){
    Application.findOne({"_id" : req.query._id},function(err,application){
        if(err){
            res.status(500).send(err);
        }else{
            if(application){
                console.log("entered")
                res.status(200).send(application);
            }else{
                res.status(404).send(err);
            }

        }
    })
});

我的代码(给出一个文档作为结果)

app.get('/api/application',function(req,res){
    Application.findOne({"_id" : {"appId" : 1,"name" : "my app"}},function(err,application){
        if(err){
            res.status(500).send(err);
        }else{
            if(application){
                console.log("entered")
                res.status(200).send(application);
            }else{
                res.status(404).send(err);
            }

        }
    })
});

当我的console.log(req.query._id) 结果{"appId" : 1,"name" : "my app"} 时在哪里

我不明白我犯了什么错误。当 _id 不是复合键时,一切正常。

提前致谢!!

【问题讨论】:

  • req.query._id 在应该是字符串时如何解析为对象? API是如何调用的?请分享网址
  • @sidgate 这就是我调用 $http.get('/api/application',{params:{"_id":appDb._id}}) 的方式,认为您的评论给了我必要的解释。所以它是一个字符串。我是新手。非常感谢。
  • 即使将字符串转换为对象,您仍然做错了。见How to query nested objects?。永远不要尝试匹配“对象”,即使您认为自己确定了键。而是对属性的内部路径使用“点表示法”,这样可以确保嵌套属性“以任何顺序”匹配。

标签: node.js mongodb rest mean-stack


【解决方案1】:

正如 cmets 中建议的 sidgate,它是一个字符串,不能作为对象解析。将复合键的值作为单个参数传递是唯一的方法。

【讨论】:

    猜你喜欢
    • 2018-02-13
    • 1970-01-01
    • 2020-12-29
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2016-05-28
    • 1970-01-01
    相关资源
    最近更新 更多