在我的数据库中,有许多发行人和许多产品。用户可以创建(并拥有)多个发行人。我正在尝试运行查询 它将返回与由给定用户创建的发行人关联的所有产品。我希望返回的结果包括 与给定产品关联的发行人的名称(不仅限于ID)。
这是上下文的一些简化模式:
const OfferingSchema = new mongoose.Schema({
issuerID: {
type: String,
required: true
},
offeringName: {
type: String,
required: true
},
});
const Offering = mongoose.model('Offering', OfferingSchema, 'offerings');
const IssuerSchema = new mongoose.Schema({
user_id: {
type: String,
required: false
},
name: {
type: String,
required: true
},
});
const Issuer = mongoose.model("Issuer", IssuerSchema, "issuers");
据我了解,我需要使用$lookup
来“联接”这两个集合。我尝试过的是这样:
db.offerings.aggregate([{
$lookup:{from: "issuers",
localField: "issuerID",
foreignField: "_id",
as: "issuerInfoAilias" }
}])
但是我得到了每个产品,每个产品文档都有一个inssuerInfoAlias
字段,它是一个空数组。
运行以下查询将返回issuerID
为5c953c18eb4a0a690892f001
的产品
db.offerings.findOne({"_id" : ObjectId("5c9baa8b1fe76d79a108f3fb")})
运行以下查询将返回发行者:
db.issuers.findOne({"_id":ObjectId("5c953c18eb4a0a690892f001")})
所以我知道数据库中至少存在一对。
我希望获得所有产品的所有产品,包括与产品文档issuerID
字段中的ID相关的发行人名称。我需要进行哪些更改才能将其退回?
答案 0 :(得分:0)
根据我在架构中看到的内容,我认为您需要使用foreignField : "user_id"
而不是foreignField : "_id"
。
尝试一下:
db.offerings.aggregate([{
$lookup:{
from: "issuers",
localField: "issuerID",
foreignField: "user_id",
as: "issuerInfoAilias"
}
}])