在mongoose中查询ObjectId字段时获取空数组

时间:2018-02-01 09:31:43

标签: node.js mongodb express mongoose

我有什么
我已经定义了一个mongoose模式如下

var favoriteSchema = new Schema({

    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    },
    cars: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Car'
    }]
    }, {
        timestamps: true
    });

我还为此模型/架构定义了get / post路由:

favoriteRouter.route('/')
.get((req,res,next) => {
    Favorites.find({user: req.user.id})
    console.log(req.user.id);
    //.populate('user')
    //.populate('cars')
    .then((favorites) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');
        res.json(favorites);
    }, (err) => next(err))
    .catch((err) => next(err));
})
.post((req, res, next) => {
    Favorites.create(req.body)
    .then((favorite) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'application/json');
        res.json(favorite);
    }, (err) => next(err))
    .catch((err) => next(err));
})

我需要什么
'get'操作对我不起作用。我想检索用户的所有收藏夹。 post请求工作正常,所以我可以看到使用mongo控制台正确存储文档,但是当我执行get请求时,我得到一个空数组。

我尝试了什么
·我尝试使用console.log(req.user.id)来确认这是正确的 ·我也尝试过不按用户过滤 - > Favorites.find({}),这很好用 ·我尝试过Favorites.find({'name':...})和Favorites.find({name:...}),但它们都不适用于我。

任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

此代码错误

Favorites.find({user: req.user.id})
console.log(req.user.id);
//.populate('user')
//.populate('cars')
.then((favorites) => {

你必须将.then应用于承诺,现在你将它应用于任何东西。试试这个:

console.log(req.user.id);
Favorites.find({user: mongoose.Schema.Types.ObjectId(req.user.id)})
.then((favorites) => {