一个ObjectId的ObjectId的Mongoose查询数组

时间:2016-02-29 23:40:07

标签: arrays mongodb mongoose

尝试查询包含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的知识来使它工作。

任何帮助将不胜感激!

1 个答案:

答案 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