我正在使用猫鼬4.6.3。
我有以下架构:
var mongoose = require('mongoose');
var User = require('./User');
var TicketSchema = new mongoose.Schema({
user : { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
},
{
timestamps: true
});
var DrawSchema = new mongoose.Schema({
...
max_ticket_per_user : { type : Number, required: true },
tickets: [TicketSchema]
});
module.exports = mongoose.model('Draw', DrawSchema);
如何计算某个抽奖券的票证(DrawSchema的票证字段)中某个User ObjectId(TicketSchema的user字段)的嵌入文档?我想计算一次抽奖的用户门票。
更改架构设计会更好吗?
谢谢
您可以使用聚合框架,利用$filter
和$size
运算符获取具有分别与用户ID及其大小匹配的元素的过滤数组,随后将为您提供计数。
对于单幅绘制,请考虑$match
在_id查询的第一步添加管道运算符,以过滤集合中的文档。
考虑运行以下聚合管道以获得所需的结果:
Draw.aggregate([
{ "$match": { "_id": drawId } },
{
"$project": {
"ticketsCount": {
"$size": {
"$filter": {
"input": "$tickets",
"as": "item",
"cond": { "$eq": [ "$$item.user", userId ] }
}
}
}
}
}
]).exec(function(err, result) {
console.log(result);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句