我想知道是否可以在链接的收藏中直接搜索。
我使用Express和mongoosejs
我有以下情况。
我有3个系列,交易,产品和商店,我已关联产品和商店与交易集合。
const DealSchema = new Schema({
...
product: {
type: Schema.Types.ObjectId,
ref: 'product'
},
shop: {
type: Schema.Types.ObjectId,
ref: 'shop'
},
...
});
在我的收藏品中,我有一个名为upc的字段。
我有一个处理交易创建的控制器,但是在我创建交易之前,我想检查是否已经在这个商店中与同一个UPC达成交易,如果是这样我只会更新确认的字段。
这是我的控制器
async create(req, res) {
const dealProps = req.body;
const product = await Products.findOne({ upc: dealProps.upc });
let deal;
if (product) {
deal = await Deals.findOne({ product: product._id });
if (deal.shop.toString() === dealProps.shop.toString()) {
const updatedDeal = await Deals.findOneAndUpdate({ product: product._id }, {
$push: {confirmedBy: dealProps.user }
});
res.send(updatedDeal);
}
} else {
deal = await (new Deals(dealProps)).save();
res.send(deal);
}
}
我试图在产品系列中直接搜索,如下所示:
const product = await Deals.findOne({'product.upc': dealProps.upc });
但是它返回null。
有没有办法在链接的集合中直接搜索?我是否需要为产品集合中的upc字段创建索引?
如果没有,我应该重新考虑我的交易集合添加upc和storeId以简化查找吗?
感谢您的帮助,非常感谢。