2017-02-28 51 views
0

我有用戶和用戶擁有文檔。用戶最多可以有100個文檔。用戶只能編輯最多50個文件。當我插入新文檔時,首先查詢User.documents以查找文檔數量,然後使用userIdisFinished=true查詢文檔,並檢查是否有可編輯文檔的空間。有沒有辦法通過單個查詢獲取用戶的totalfinished文檔?我目前的代碼如下所示。不同標準的貓鼬聚合計數

var UserSchema = mongoose.Schema({ 
    email: {type: String, index: {unique: true, sparse: true}}, 
    password: String, 
    }); 

    UserSchema.virtual('documents',{ 
    ref: 'Document', 
    localField:'_id', 
    foreignField:'owner' 
}); 


var DocumentSchema = mongoose.Schema({ 
    owner : { type:mongoose.Schema.Types.ObjectId, ref: 'User' }, 
    name: String, 
    data: String, 
    isFinished: { 
     type: Boolean, default: false 
    }, 
    updateDate: Date 
    }); 


User.findOne({_id: req.userId}).populate('documents').exec(function(err, user) { 

// user.documents == total user documents 

if (user.documents && user.documents.length < 100) { 

    Document.count({owner:req.userId,isFinished:true},function(err,count) { 
    // count == finished user documents 
     if (count < 50) { 

      // do something 
     } 


     }) 
    } 
}) 

回答

0

我想我已經解決了聚合問題。

Document.aggregate([ 
    { 
     $match: { 
      owner:user._id 
     }}, 
    { $group: { 
     "_id": "$owner", 
     "totalCount": { 
      $sum: 1 
     }, 
     "finishedCount" : { $sum: { $cond: ["$isFinished",1,0]} } 
    } 
    }]).exec(function (err,result) { 
    if (result && result.length > 0) { 
     if (result[0].totalCount >= config.registeredTotalLimit) { 
      // Registered total limit is reached 
      console.log('Register registeredTotalLimit'); 
     } 
     if (result[0].finishedCount >= config.registeredActiveLimit) { 
      // Registered active limit is reached 
      console.log('Register registeredActiveLimit'); 
     } 
    }