【问题标题】:Mongodb find(query) returning emptyMongodb find(query) 返回空
【发布时间】:2017-12-03 04:48:22
【问题描述】:

拜托,我在这里做错了什么?我的搜索/查询全部返回空。我尝试了两种方法(注释掉其中一种)。

app.get('/dashboard', isLoggedIn, function(req, res) {
    //check if i still have logged in user in session
    console.log(req.user._id); //confirmed, I have it

    var owner = req.user._id; //assign user id to var owner

    //create a query
    var query = {createdby: owner};

    //first method using where clause  
    Election.find().where('createdby').equals(owner)
              .exec(function(err, elections) {
                    if (err) { return next(err); }
                    console.log(elections);
                    res.render("dashboard", { elections: elections });
            });

    //second method
    /**Election.find(query)
        .sort({ createdAt: "descending" })
        .exec(function(err, elections) {
            if (err) { return next(err); }

                console.log(elections);
                res.render("dashboard", { elections: elections });
            });**/

  //both methods returned empty

});

下面是模型,我真的看不出这里有任何错误。有人应该帮助我,我已经做了好几天了,谷歌没有帮助。

// models/election.js
// load the things we need
var mongoose = require('mongoose');


// define the schema for our election model
var electionSchema = mongoose.Schema({

local            : {
    title: String,
    disc: String,
    startdate: {type: String, required: true},
    enddate: {type: String, required: true},
    createdAt: {type: Date, default: Date.now()},
    updatedAt: {type: Date, default: Date.now()},
    createdby: {type: String},
    ballots: { 
        ballot: { type: String }
            }

}

});


  // create the model for elections and expose it to our app
  module.exports = mongoose.model('election', electionSchema);

【问题讨论】:

    标签: node.js mongodb express mongoose


    【解决方案1】:

    我从未使用过可链接查询构建器 API,因此我的响应包含不同的格式。但是,您可以尝试以下方法来查看 querybuilder 方法是否是原因。

    我也会尝试将字符串 owner 转换为 objectId:

    var ownerObjectId = mongoose.Types.ObjectId(req.user._id)
    Election.find({ createdby: ownerObjectId })
              .exec(function(err, elections) {
                    if (err) { return next(err); }
                    console.log(elections);
                    res.render("dashboard", { elections: elections });
            });
    

    【讨论】:

    • 我只是尝试了上面的方法,最终产品还是一样(返回空)
    • 你在回调函数中设置断点了吗?错误可能设置了吗?如果不是,您确定给定键存在具有给定值的对象吗?否则我看不出有什么问题
    • 这是来自数据库的快照: [{ "_id" : { "$oid" : "5a218b62509c3700158ab800" }, "local" : { "createdby" : "5a218b44509c3700158ab7ff", "enddate" : “2017-12-27T19:07”、“startdate”:“2017-12-21T05:06”、“disc”:“6rt6r6r”、“title”:“yyyyyyyy”、“updatedAt”:{“$date”: 1512147753816 }, "createdAt" : { "$date" : 1512147753816 } }, "__v" : 0 }]
    • 你自己没有看到问题吗?显示的文档不符合您在原始帖子中提供的架构。 _id 显然是一个以 $oid 为属性的对象。这肯定是问题所在,与您迄今为止提供的所有信息无关:/
    【解决方案2】:

    我终于弄清楚了这个问题。我编辑了这一行:

     //i changed this line
     Elections.find({ createdby: ownerObjectId })
     
     //to this
      Elections.find({ 'local.createdby': ownerObjectId })

    谢谢大家

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-04-04
      • 2013-09-25
      相关资源
      最近更新 更多