![](/img/trans.png)
[英]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.