如何通过填充字段在猫鼬中查找文档?

时间:2019-02-22 21:59:06

标签: node.js mongodb mongoose

我的猫鼬有问题。当我将某个字段引用到其他集合时,我失去了通过该字段进行搜索的能力。我不知道如何正确地描述我的问题,因此请查看示例。

模式:

var PostSchema = new Schema({
title: String,
content: String,
url: String,
author: { type: Schema.ObjectId, ref: 'User'},
mainImage: String,
type: String
});

查询:

Post.find({author: user._id})
    .then(posts => res.send(posts))
    .catch(err => res.status(500).send(err))

不返回任何内容。但是,如果我将“作者”字段更改为“字符串”,它将起作用,但不会填充。 :(

已更新: 我不敢相信我做到了:

var PostSchema = new Schema({
title: String,
content: String,
url: String,
author: {type: String, ref: 'User'},
mainImage: String,
type: String
});

只需将类型更改为字符串即可。天哪,我不知道它是如何工作的。猫鼬如何知道我需要在引用集合中比较哪个字段?我的意思是没有直接链接到“ _id”字段(请参阅查询)。有人可以解释吗?

Upd2:

Auhtor模式:

var UserSchema = new Schema({
id: String,
about: String,
firstname: String,
lastname: String,
email: String,
avatar: String,
city: String,
country: String,
dateOfBirth: String,
password: String,
},
{
  timestamps: true
})

如您所见,我使用附加的“ id”字段只是为了向用户提供url的简单数字ID(/ id1等)。但是我确定这不是问题的根源:)

1 个答案:

答案 0 :(得分:0)

尝试将type: Schema.ObjectId更改为type: mongoose.Schema.Types.ObjectId