【问题标题】:Cannot retrive data from Mongoose DB ? returns blank result?无法从 Mongoose DB 中检索数据?返回空白结果?
【发布时间】:2015-10-23 19:49:24
【问题描述】:

我在 Mongoose DB 上创建了一个具有以下结构的文档:

{
"_id": {
    "$oid": "55bb2c92e4b0759bdca17fdc"
},
"email": "Customer1@xyz.com",
"serviceType": "Electricity",
"month": "JAN",
"year": "2015",
"bill": [
    {
        "PeakMsmt": "1",
        "OffPeakMsmt": "2",
        "Week": "Week1",
        "WeekEndTimeStamp": "2015-10-10T00:00:00.000Z"
    },
    {
        "PeakMsmt": "2",
        "OffPeakMsmt": "3",
        "Week": "Week2",
        "WeekEndTimeStamp": "2015-11-10T00:00:00.000Z"
    },
    {
        "PeakMsmt": "3",
        "OffPeakMsmt": "4",
        "Week": "Week3",
        "WeekEndTimeStamp": "2015-12-10T00:00:00.000Z"
    }
]
}

我的 Node.JS 代码是:

var mongoose   = require("mongoose");
mongoose.connect('mongodb://MY_MONGO_DB_URL');

var oub = require('./OptimizeUtilityBill');
oub.find({email:'Customer1@xyz.com',serviceType:'Electricity',month:'FEB',year:'2015'},function(err,oubDBResult){
        if(err){
            console.log("Error: "+err);
        }else{
            console.log("OUB result: "+oubDBResult);
        }
    });

我在节点 JS 中的猫鼬模式是:

var mongoose = require('mongoose');
var Schema  = mongoose.Schema;

var OptimizeUtilityBillSchema = new Schema({
    email:String,
    serviceType:String,
    month:String,
    year:String,
    bill:[{PeakMsmt:String,
        OffPeakMsmt:String,
        Week:String,
        WeekEndTimeStamp:String}]
});

module.exports = mongoose.model('optimizeUtilityBill', OptimizeUtilityBillSchema);

请帮忙,我是 node.JS 和 mongoose 的新手。 我花了几个小时试图让它工作,并且在谷歌上搜索了很多关于 Mongoose 模式的信息。但无法查询 mongoose。

当我运行这个程序时,我得到以下结果:

【问题讨论】:

  • 你可以试试 FindOne。如果我没记错的话 Find 会返回一个光标。
  • 尝试了 findOne,结果为空。虽然在猫鼬中,我正在寻找我正在寻找的人。
  • @user3769778 您的示例文档来自的集合是否准确命名为optimizeutilitybills?如果不是,这看起来像是 stackoverflow.com/questions/14183611/… 的骗子。
  • @JohnnyHK 是的,我的 mongoDB 文档名称是复数形式的 optimizeUtilityBills
  • @JohnnyHK 甚至尝试过小写不工作

标签: node.js mongoose


【解决方案1】:

试试这个:

var mongoose   = require("mongoose");
var db = mongoose.connect('mongodb://MY_MONGO_DB_URL');
var oub = require('./OptimizeUtilityBill'); 

db.on('error', function(){console.log('connection error')});
db.once('open', function (callback) {
   oub.find({email:'Customer1@xyz.com',serviceType:'Electricity',month:'FEB',year:'2015'},function(err,oubDBResult){
    if(err){
        console.log("Error: "+err);
    }else{
        console.log("OUB result: "+oubDBResult);
    }
});
});

您无需等待连接真正打开。

【讨论】:

  • 运行上面的代码给我错误:堆栈跟踪db.on('error', console.error.bind(console, 'connection error:')); ^ TypeError: undefined is not a function at Object.<anonymous> (C:\Users\CFG\Desktop\API\POC\TRXD\TestCode\app.js:20:4) at Module._compile (module.js:460:26) at Object.Module._extensions..js (module.js:478:10) at Module.load (module.js:355:32) at Function.Module._load (module.js:310:12) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3
  • 看起来是错误回调的问题,我把它简化了。
【解决方案2】:

我的问题的解决方案在这里:

Mongoose find() not returning result

所以要让它工作,我需要将我的架构导出为:

module.exports = mongoose.model('optimizeUtilityBills', OptimizeUtilityBillSchema,'optimizeUtilityBills');

注意:optimizeUtilityBills 是我在 mongoDB 中的文档名称。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多