【发布时间】:2018-02-03 22:25:47
【问题描述】:
我有一个学生收藏和一个班级收藏 student._id(ObjectId) 需要在 classes.owner(String) 上查找文件集合时匹配。我得到文件的空数组。我做错了什么?
var express = require('express');
var router = express.Router();
var Account = require('../models/account');
var Connections = require('../models/connections');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
//get all advocates for student.
router.route('/:student_id?')
.get(function (req, res) {
Account.aggregate(
{ "$match": { "_id": mongoose.Types.ObjectId(req.params.student_id) } },
{$lookup:
{
from: 'classes',
localField: 'owner',//**String**
foreignField: '_id', //**ObjectId**
as: 'classes'
}
}
).exec(function (err, doc) {
console.log(doc[0]);
if (err) {
res.send(err);
} else {
res.send(doc[0]).end();
}
})
});
module.exports = router;
【问题讨论】:
-
发布您的架构。而
_id: req.params.student_id就足够了。 -
问题似乎在查找中。您不能将 ObjectId 的本地字段与 String 的 foreignField 匹配。无论如何围绕这个?
-
是的.. 将类所有者更改为 ObjectId。为什么要使用字符串?
-
我可以轻松做到这一点,但问题是为了使该 ID 在前端可用,我不是必须在整个地方解析它吗?就像每次我需要引用它时都将它转换为字符串一样?还是 mongoose 在将其发送回 UI 之前会自动将其作为字符串返回?
-
哦,另一个问题是我将如何将所有者保存为对象 ID,而不是添加新条目?因为 UI 会将其作为 API 调用中的字符串传回。我是否需要将其声明为我的模型的对象 ID 或其他东西?
标签: javascript mongodb mongoose