Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays ObjectId的Mongoose查询数组';这是一个目标_Arrays_Mongodb_Mongoose - Fatal编程技术网

Arrays ObjectId的Mongoose查询数组';这是一个目标

Arrays ObjectId的Mongoose查询数组';这是一个目标,arrays,mongodb,mongoose,Arrays,Mongodb,Mongoose,正在尝试查询包含ObjectId引用的子文档数组,并查找一项 这些项目是ObjectId,当我添加新课程并将其“分配”到特定位置时,会填充这些项目 这个猫鼬模式说明了我的意思 var mongoose = require('mongoose'); var lessonNames = new mongoose.Schema({ day: {type: String }, name: {type: String}, startTime: {type: String}, endTim

正在尝试查询包含ObjectId引用的子文档数组,并查找一项

这些项目是ObjectId,当我添加新课程并将其“分配”到特定位置时,会填充这些项目

这个猫鼬模式说明了我的意思

var mongoose = require('mongoose');

var lessonNames = new mongoose.Schema({
  day: {type: String },
  name: {type: String},
  startTime: {type: String},
  endTime: {type: String}
});

var locationNames = new mongoose.Schema({
  name: {type: String, required: true},
  address: String,
  lessons: [ { type: mongoose.Schema.Types.ObjectId, ref: 'lessonnames'}]
});

mongoose.model('lessonnames', lessonNames);
mongoose.model('locationnames', locationNames);
我已经在一个位置添加了一个课程,现在我正在尝试查找这个特定的课程。我试过几种方法,但都不管用。每次我将查询输出到console.log时,都会收到一个null或未定义的报告

      if (location.lessons && location.lessons.length > 0) {
        loc
            .findById(req.params.locationid)
            .populate('lessons', '_id')
              .exec(function (err, myLesson) {
                console.log(myLesson.lessons)
              });
当我执行上述语句时,我看到nodejs控制台中生成了以下代码,并且启用了mongoose调试

Mongoose: locationnames.findOne({ _id: ObjectId("56d4b687c4bcb5681a870cb5") }) { fields: undefined }  
GET /api/locations/56d4b687c4bcb5681a870cb5/lesson/56d4b687c4bcb5681a870cb4 
Mongoose: lessonnames.find({ _id: { '$in': [ ObjectId("56d4b687c4bcb5681a870cb4") ] } }) { fields: { _id: 1 } } 
下面的代码行是console.log的输出。如您所见,ObjectId显示为lessons数组的一部分。但是我如何做一个“选择”这个ObjectId的查询,这样我就可以用它来引用一节课了

[{"_id":"56d4b687c4bcb5681a870cb4"}]
搜索网页,看到一些关于_idnog是字符串类型的帖子,我应该把它转换成字符串。但我认为使用ObjectId应该是可行的,查询ObjectId应该是相当容易的,但是我缺乏mongoose和mongodb的良好知识来让它工作


任何帮助都将不胜感激

请按如下方式尝试,在
填充
中的
{u id:“56d4b687c4bcb5681a870cb4”}
以匹配
课程
数组中的
id

loc.findById(req.params.locationid)
   .populate('lessons', null, {_id: "56d4b687c4bcb5681a870cb4"})
   .exec(function (err, location) {

   });

非常感谢你!现在很有魅力。我想我走的路是对的,但使用的.populate方法是错误的。