[英]How to Update many elements in mongoose array which has embedded documents
[英]How to query findOne() in mongoose such that we get subset of array of documents which satisfy particular condition?
当我查询这个
const pendingOfThisShop = await ShopProfile.findOne({ shop: req.shop.id, "shopsAffiliate.status":"pending" },{ shopsAffiliate: 1, _id: 0 }
我得到一个像这样的 object
{
"shopsAffiliate": [
{
"status": "approved",
"_id": "5db315a6de255a4444b0987b",
"affiliateId": "5db31263a362ed4ed84c7ad5"
},
{
"status": "pending",
"_id": "5db315c5de255a4444b0987d",
"affiliateId": "5db2b4713db4101e48836f0a"
}
]}
我得到两个状态:“已批准”和状态:“待定”。 我只想在 shopAffiliate 数组中获取那些状态为“待定”的对象。 我应该怎么办?
尝试这个:
const pendingOfThisShop = await ShopProfile.findOne({ shop: mongoose.Types.ObjectId(req.shop.id), "shopsAffiliate.status":"pending" },{ "shopsAffiliate": {'$elemMatch': {"status":"pending"}}, _id: 0 });
我得到两个状态:“已批准”和状态:“待定”
您的查询正在返回预期结果。
shopsAffiliate
是一组嵌套文档。 shopsAffiliate
本身是ShopProfile
集合中文档的一部分。 您的查询检查ShopProfile
中满足以下 2 个条件的任何文档
shop: req.shop.id
"shopsAffiliate.status":"pending"
当它找到任何符合上述两个条件的文档时,它会返回整个文档。 它不关心匹配文档的shopsAffiliate
数组中是否有其他文档没有pending
状态,它只需要在shopsAffiliate
数组中找到至少 1 个具有pending
状态的文档,一旦找到,它就会返回整个文件。
我只想在 shopAffiliate 数组中获取那些状态为“待定”的对象。 我应该怎么办?
您可以使用聚合操作来获得所需的结果
const pendingOfThisShop = await ShopProfile.aggregate([
{
$match: {
shop: req.shop.id,
"shopsAffiliate.status": "pending"
}
},
{
$unwind: "$shopsAffiliate"
},
{
$match: { "shopsAffiliate.status": "pending" }
}
]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.