Я сделал это следующим образом:
db.collection.aggregate([
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] ).map(function(record, index){
print(index);
});
Агрегат вернет массив, поэтому просто зациклируйте его и получите окончательный индекс.
И другим способом сделать это:
var count = 0 ;
db.collection.aggregate([
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] ).map(function(record, index){
count++
});
print(count);
1) То, что вы хотите сделать, противоречит тому, как работает Django, и приведет к большей боли, чем оно того стоит. Я бы порекомендовал сделать prefetch_related
как предложено. Вы также можете изучить следующее. Вот документы на ManyToManyField .
class Item(models.Model):
name = models.CharField(max_length=100)
class Group(models.Model):
name = models.CharField(max_length=100)
items = models.ManyToManyField(Group, through='ItemGroup')
class ItemGroup(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
2) Взгляните на ListField
. Я думаю, что это должно помочь вам достичь того, что вы хотите там.