尝试查询包含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或undefined报告。
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显示为课程数组的一部分。但是如何进行“选择”此ObjectId的查询,以便我可以参考课程。
[{"_id":"56d4b687c4bcb5681a870cb4"}]
搜索网页,看到一些关于_id nog是一个字符串类型的帖子,我应该把它变成一个字符串。但我认为应该可以使用ObjectId,并且查询它应该相当容易,但我缺乏mongoose和mongodb的知识来使它工作。
任何帮助将不胜感激!
答案 0 :(得分:0)
请按以下方式尝试,FB.login(function(response) {
if (response.authResponse) {
//user just authorized your app
document.getElementById('loginBtn').style.display = 'none';
getUserData();
}
}, {scope: 'email,user_likes,user_location'});
中的{_id: "56d4b687c4bcb5681a870cb4"}
与populate
数组中的ids
相匹配。
lessons