count $ size of $ lookup collection с $ unwind in mongoose & hellip ;! [Дубликат]

Исключение нулевого указателя - это индикатор того, что вы используете объект, не инициализируя его.

Например, ниже - класс ученика, который будет использовать его в нашем коде.

public class Student {

    private int id;

    public int getId() {
        return this.id;
    }

    public setId(int newId) {
        this.id = newId;
    }
}

Приведенный ниже код дает вам исключение с нулевым указателем.

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}

Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:

public class School {

    Student obj_Student;

    public School() {
        try {
            obj_Student = new Student();
            obj_Student.setId(12);
            obj_Student.getId();
        }
        catch(Exception e) {
            System.out.println("Null Pointer ");
        }
    }
}
16
задан randombits 27 January 2014 в 19:49
поделиться

3 ответа

Вы можете попробовать подсчитать предметы в еде.

 db.collection.aggregate([{$project: {numberOfFoos: { $size: "$foos" } } } ] )
-3
ответ дан jitendra rajput 20 August 2018 в 10:48
поделиться

В MongoDB 2.6 у Aggregation Framework есть новый массив $size , который вы можете использовать:

> db.mycollection.insert({'foo':[1,2,3,4]})
> db.mycollection.insert({'foo':[5,6,7]})

> db.mycollection.aggregate({$project: { count: { $size:"$foo" }}})
{ "_id" : ObjectId("5314b5c360477752b449eedf"), "count" : 4 }
{ "_id" : ObjectId("5314b5c860477752b449eee0"), "count" : 3 }
34
ответ дан Stennie 20 August 2018 в 10:48
поделиться
  • 1
    Есть ли способ получить 7 (4 + 3) в этом случае? – xxbidiao 9 March 2018 в 19:30
  • 2
    @xxbidiao Конечно, просто используйте $group этап, который суммирует размеры массива: db.mycollection.aggregate({$group: { _id: null, totalSize: { $sum: { $size: "$foo"}} }}). – Stennie 9 March 2018 в 22:43

, если вы находитесь в последней версии mongo (2.2 и более поздней), вы можете использовать структуру агрегации.

db.mycollection.aggregate([
  {$unwind: '$foo'},
  {$group: {_id: '$_id', 'sum': { $sum: 1}}},
  {$group: {_id: null, total_sum: {'$sum': '$sum'}}}
])

, которая даст вам общую foo s вашей коллекции.

Опускание последнего group будет агрегировать результаты на запись.

16
ответ дан xlembouras 20 August 2018 в 10:48
поделиться
  • 1
    Удивительно, мне тоже помогли. Можете ли вы предложить, как я могу получить доступ к «общей сумме»? в дальнейших расчетах? – Alice Jarmusch 24 August 2017 в 14:49
Другие вопросы по тегам:

Похожие вопросы: