У меня есть коллекции документов, в которых есть массив:
{
"_id": {
"$oid": "5b602207a2f56b05028038c1"
},
"groupId": "5b32929cfc37de04f3ce9004",
"updated": 20180731084703,
"data": {
"type": "WallStory",
"playerId": "5b6003ca031f5bc44d59bb7b",
"time": "0847",
"story": "This is my new atory...",
"reads": [
"5b6003ca031f5bc44d59bb7b"
]
}
}
Теперь я хочу иметь возможность подсчитать все документы, у которых нет идентификатора пользователя в массиве "reads". Я не знаю, как это сделать?
Я думаю примерно так, но мне это не удается:
var newStories = 0;
newStories += dbCollection('groupWallStories').count({"groupId": "5b32929cfc37de04f3ce9004", "data.reads": thisUserId }).sort({"updated": -1}).limit(10);
Надеюсь, кто-нибудь сможет направить меня в правильном направлении, и заранее спасибо :-)

Вы получаете лучшую производительность от простого запроса count() с оператором $ne
dbCollection('groupWallStories').count({ "data.reads": { "$ne": thisUserId } })
Или с агрегацией вы можете использовать здесь $setIsSubset и $cond:
db.collection.aggregate([
{ "$group": {
"_id": null,
"count": {
"$sum": {
"$cond": {
"if": {
"$setIsSubset": [
[ "5b6003ca031f5bc44d59bb7b" ],
"$data.reads"
]
},
"then": 1,
"else": 0
}
}
}
}}
])
Вам также необходимо «преобразовать» с помощью id из «строки» в действительный ObjectId в совокупности.
Отлично ... Работает как шарм :-)
Покажите образец ожидаемого результата?