我有以下架构:
var UserSchema = new Schema({
fb_id: String,
subscriptions: [{ type: Schema.Types.ObjectId, ref: 'Subscription' }]
});
var SubscriptionSchema = new Schema({
asin: String,
price: Number,
user: { type: Schema.Types.ObjectId, ref: 'User' }
}, { timestamps: true });
该数据库包含以下文件:
用户
{
"_id": {
"$oid": "5a397dd97d6682fb0aeb1a01"
},
"fb_id": "99999999999999",
"__v": 0
}
订阅
{
"_id": {
"$oid": "5a397dd94ee7e13f43fefa42"
},
"updatedAt": {
"$date": "2017-12-19T21:00:09.199Z"
},
"createdAt": {
"$date": "2017-12-19T21:00:09.199Z"
},
"asin": "ABCDEFGHI001",
"price": 0.98,
"user": {
"$oid": "5a397dd97d6682fb0aeb1a01"
},
"__v": 0
}
为什么这个功能:
const test = (userId) => {
User.findOne({ fb_id: userId }).populate('subscriptions').exec()
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error);
});
};
始终返回具有空订阅数组的用户?非常感谢提前。
P.S。我正在使用蓝鸟承诺与猫鼬。
答案 0 :(得分:0)
您已将用户ID放入订阅中,这意味着如果您要获取订阅并填充用户,您将获得订阅用户数量的订阅。
示例中的用户文档没有任何与之关联的订阅,因此不会填充任何内容。
创建用户时,您需要将订阅添加到文档中。 E.g。
let newUser = new User({
db_id:"99999999999999",
subscriptions:["5a397dd94ee7e13f43fefa42"]
});
答案 1 :(得分:0)
从猫鼬4.5开始,您可以使用虚拟填充https://mongoosejs.com/docs/populate.html#populate-virtuals来完成此操作。
const UserSchema = new Schema({
fb_id: String,
});
const SubscriptionSchema = new Schema({
asin: String,
price: Number,
user: { type: Schema.Types.ObjectId, ref: 'User' },
});
UserSchema.virtual('subscriptions', {
ref: 'Subscription',
localField: '_id',
foreignField: 'user',
});