mongoose findall从不同的模型返回数据

时间:2016-06-02 05:35:34

标签: javascript node.js mongodb

users.js

var mongoose = require('mongoose');

var User = mongoose.model('user', {
  username: {
    type: String,
    required: true,
    unique: true,
    lowercase: true,
  },  
  tasks: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Tasks',
  }],
});
module.exports = User;

然后我添加一个名为user1的新用户并保存到mongo。

mongo doc看起来像:

{ 
    "_id" : ObjectId("574fb94f6a1e7d1826c16058"),
    "username" :  "user1",
    "tasks" : [ ],
    "__v" :  0
}

然后尝试获取文档,它在此处理程序中正常工作:

handlerA.js

var User = require('../models/users.js');

module.exports.getUser = function(req, res){
  User.findOne({username: "user1"}, function(err, data){
    if(err){
      console.log('getUser err', err);
      res.send('ERROR')
    } else {
      console.log('getUser fx success = ', err, data);
      res.send(data)
    }
  });
};

console.log

的结果
  

getUser fx success = null {tasks:[],__ v:0,username:'user1',_ id:574fb94f6a1e7d1826c16058}

但是在另一个处理程序中,相同的代码在单独的文件中失败。

handlerB.js

var User = require('../models/users.js');

module.exports.addStuff = function(req, res){
   User.findOne({username: "user1"}, function(err, data){
    if(err){
      console.log('addStuff err', err);
      res.send('ERROR')
    } else {
      console.log('addStuff fx success =', err, data);
      res.send(data)
    }
  });
};

console.log

的结果
  

addStuff fx success null null

尝试......并且失败了......

我还尝试了这个问题的另一个解决方案:Mongoose query return null

Mongoose使模型名称复数化,因此它在“blogposts”集合上运行find而不是“blogpost”。也就是说,你在mongo shell中的查询是在“blogmodel”集合中。在那种情况下:

var BlogModel = mongoose.Model("BlogModel", ..)

或将集合名称作为第三个参数传递:

var BlogModel = mongoose.model("BlogPost", schema, "blogmodel")

此解决方案导致handlerA.js返回null文档以及handlerB.js。

感谢您的时间。非常感谢。

附录。 我在 handlerB.js 中的用户和任务模型下运行了一个find({}) 返回的文档IN BOTH情况基于Tasks模型。 请参阅下面的Console.logs,了解User.find({})和Tasks.find({}) 错误是空值然后是数据。

我破坏了多少东西? Model.find如何返回甚至不在模型中的数据?

User.find({},funtion(err, data) ____________________
console.log of err  then data
null 
[ { subtasks: [],
    team: [ [Object] ],
    __v: 0,
    maintask: '1',
    _id: 574fce63d744cba421f750c1 
  },
  { subtasks: [],
    team: [ [Object] ],
    __v: 0,
    maintask: '2',
    _id: 574fce65d744cba421f750c2 
  }
]

Tasks.find({},function(err, data) ___________________ 
console.log of err then data
null 
[ { subtasks: [],
    team: [ [Object] ],
    __v: 0,
    maintask: '1',
    _id: 574fce63d744cba421f750c1 },
  { subtasks: [],
    team: [ [Object] ],
    __v: 0,
    maintask: '2',
    _id: 574fce65d744cba421f750c2 
  },
]

这是任务模型...... 的 tasks.js

var mongoose = require('mongoose');

var subtaskSchema = new mongoose.Schema({
   subtask: {
   type: String,
  },
  team: {
    type: Array,
    'defualt': [],
  },
  done: {
    type: Boolean,
    'defualt': false,
  },
});

var Tasks = mongoose.model('tasks', {
  maintask: {
    type: String,
  },
  subtasks: {
    type: [subtaskSchema],
  },
  team: {
    type: Array,
    'defualt': [],
  },
  done: {
    type: Boolean,
    'defualt': false,
  },
});

module.exports = Tasks;

1 个答案:

答案 0 :(得分:0)

mongoose docs建议定义一个这样的模型,你试过这个吗?

var schema = new mongoose.Schema({ name: 'string', size: 'string' });
var Tank = mongoose.model('Tank', schema);