У меня есть такой набор данных:
{
"_id" : ObjectId("5da028f8926a6200f408e531"),
"content" : [
"hello world"
],
"set" : [
{
"setA" : [
{
"userid" : "5c35f1045643180d9488112f",
},
{
"userid" : "5c35f1045643180d9488112g",
}
],
"timestamp" : ISODate("2019-10-14T07:07:44.036Z"),
"id" : ObjectId("5da41ec053fce70ab03b9c18")
},
{
"setA" : [
{
"userid" : "5c35f1045643180d9488112g",
}
],
"timestamp" : ISODate("2019-10-14T07:07:37.470Z"),
"id" : ObjectId("5da41eb953fce70ab03b9c16")
},
{
"setA" : [],
"timestamp" : ISODate("2019-10-14T07:07:29.454Z"),
"id" : ObjectId("5da41eb153fce70ab03b9c14")
}
],
"secondset": [
{
"userid" : "5c35f1045643180d9488112f",
},
]
"__v" : 0,
}
Теперь я хочу найти идентификатор пользователя, существующий в массиве setA
или нет, я немного запутался, как написать запрос. Если этот случай на secondset
массиве, то я знаю, как проверить. Как этот запрос:
db.CollectionName.findOne(
{ _id: ObjectId("5da028f8926a6200f408e531") },
{ secondset: { $elemMatch: { userid: req.body.userid } }
)
по этому запросу, если идентификатор пользователя существует, затем верните идентификатор пользователя, в противном случае верните []. Поэтому я могу продолжить работу с условием типа
if (data.length > 0) {
//Already exist
} else {
//Not exist
//Do some stuff here
}
Но я не получаю ответ на вложенный массив. Я написал запрос, но не добился успеха. Запрос был:
db.CollectionName.findOne(
{ _id: ObjectId("5da028f8926a6200f408e531"), "set.id": ObjectId("5da41eb953fce70ab03b9c16") },
{ "set.$.setA": { $elemMatch: { userid: "5c35f1045643180d9488112f" } }
)
с этим запросом я получаю сообщение об ошибке, т.е. Cannot use $elemMatch projection on a nested field.
Есть ли кто-нибудь, кто может подсказать мне, как решить эту проблему. Любая помощь или предложение действительно приветствуется.