В запросе мы добавляем новое поле с именем userIDExists
, которое будет иметь логическое значение в зависимости от того, существует ли переданное в uid
или нет, оно будет true
или false
, фильтруя userId
массив и получение объекта обратно, если условие выполнено и $filter
приведет к массиву объектов, которые соответствуют $cond
, тогда size>0
даст логическое значение, основанное на том, возвращены ли какие-либо объекты:
db.postData.aggregate([{
$addFields: {
userIDExists: {
$gt: [{
$size: {
$filter: {
input: "$userId",
as: "each",
cond: { $eq: ["$$each.uid", 1] }
}
}
}, 0]
}
}
}])
Сбор данных:
/* 1 */
{
"_id" : ObjectId("5e197f02627ef782367de3cf"),
"userId" : [
{
"uid" : 1
},
{
"uid" : 2
},
{
"uid" : 4
}
],
"comments" : [],
"videoUrl" : "",
"textData" : "NO",
"privacy" : "YES"
}
/* 2 */
{
"_id" : ObjectId("5e197f13627ef782367de4f6"),
"userId" : [
{
"uid" : 11
},
{
"uid" : 21
},
{
"uid" : 41
}
],
"comments" : [],
"videoUrl" : "",
"textData" : "YES",
"privacy" : "NO"
}
Результат: В документе 1 userIDExists : true
, поскольку "uid" : 1
существует.
/* 1 */
{
"_id" : ObjectId("5e197f02627ef782367de3cf"),
"userId" : [
{
"uid" : 1
},
{
"uid" : 2
},
{
"uid" : 4
}
],
"comments" : [],
"videoUrl" : "",
"textData" : "NO",
"privacy" : "YES",
"userIDExists" : true
}
/* 2 */
{
"_id" : ObjectId("5e197f13627ef782367de4f6"),
"userId" : [
{
"uid" : 11
},
{
"uid" : 21
},
{
"uid" : 41
}
],
"comments" : [],
"videoUrl" : "",
"textData" : "YES",
"privacy" : "NO",
"userIDExists" : false
}