簡體   English   中英

Mongoose 查詢返回完整文檔的數組

[英]Mongoose query on array returning the complete document

我正在制作一個 node.js 應用程序,我正在嘗試使用 mongoose 查詢一個數組,並且我正在返回完整的未過濾文檔。 該集合存儲具有以下數據的單個文檔(這也是我在執行查詢后收到的數據):

{
    "_id": {
        "$oid": "60c0900f619f89f6943efbfd"
    },
    "milestones": [{
        "id": "1",
        "name": "5 Friends",
        "description": "refer 5 friends to get 100 GroCash!",
        "isActive": true,
        "reward": 100,
        "condition": 5
    }, {
        "id": "2",
        "name": "7 Friends",
        "description": "refer 7 friends to get 100 GroCash!",
        "isActive": true,
        "reward": 150,
        "condition": 7
    }, {
        "id": "3",
        "name": "5 Friends",
        "description": "refer 5 friends to get 100 GroCash!",
        "isActive": true,
        "reward": 550,
        "condition": 5
    }],
    "newUserReward": 50,
    "refreeReward": 50
}

我正在運行的查詢是: incentiveModel.find({'milestones.isActive':true,'milestones.condition':5})我希望它返回以下數據:

{
        "_id": {
            "$oid": "60c0900f619f89f6943efbfd"
        },
        "milestones": [{
            "id": "1",
            "name": "5 Friends",
            "description": "refer 5 friends to get 100 GroCash!",
            "isActive": true,
            "reward": 100,
            "condition": 5
        }, {
            "id": "3",
            "name": "5 Friends",
            "description": "refer 5 friends to get 100 GroCash!",
            "isActive": true,
            "reward": 550,
            "condition": 5
        }],
        "newUserReward": 50,
        "refreeReward": 50
}

我已經嘗試過$project但仍然沒有幫助。
mongoose 架構是:

const milestone = new Schema({
    id:{
        type:String,
        required:true,
        default:mongoose.Types.ObjectId()
    },
    name:{
        type:String,
        required:true,
        default:''
    },
    description:{
        type:String,
        required:true,
        default:''
    },
    isActive:{
        type:Boolean,
        required:true,
        default:false
    },
    condition:{
        type:Number,
        required:true,
        default:null
    },
    reward:{
        type:Number,
        required:true,
        default:0
    }
})

export const incentiveScema = new Schema({
    milestones:{
        type:[milestone]
    },
    newUserReward:{
        type:Number,
        default:0
    },
    refreeReward:{
        type:Number,
        default:0
    }

})

提前致謝!

await  incentiveModel.aggregate([
       {
$unwind:'$milestones'
      }
{
    $match:{
       $and:[{'milestones.isActive':true},{'milestones.condition':5}]
    }

    ])

參考下面這個例子..

https://mongoplayground.net/p/Xrrby8yN0IS

可能您可以將aggregate$addFields使用,您可以在其上過濾掉數據。 以下是相同的查詢。 如需更多參考,請通過此鏈接go 。

檢查示例示例

db.collection.aggregate([
  {
    $addFields: {
      "milestones": {
        $filter: {
          input: "$milestones",
          as: "milestones",
          cond: {
            $and: [
              {
                $eq: [
                  "$$milestones.isActive",
                  true
                ]
              },
              {
                $eq: [
                  "$$milestones.condition",
                  5
                ]
              }
            ]
          }
        }
      }
    }
  }
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM