Arrays ObjectId的Mongoose查询数组';这是一个目标
正在尝试查询包含ObjectId引用的子文档数组,并查找一项 这些项目是ObjectId,当我添加新课程并将其“分配”到特定位置时,会填充这些项目 这个猫鼬模式说明了我的意思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
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方法是错误的。