проекция $ elemMatch в node.js - PullRequest
0 голосов
/ 27 апреля 2018
dbo.collection("users")
            .findOne({email: emailGiven, "friends.email": element.email},
                     { friends: { $elemMatch: { email: element.email } } },
                     function(errT, resultT) {})

У меня есть запрос выше в node.js, но по какой-то причине часть elemMatch запроса не работает на node.js, но когда я выполняю тот же запрос в терминале mongo, он работает, поэтому я думаю, что возможно node.js не поддерживает $ elemMatch? Если это так, может кто-нибудь сказать мне, что было бы эквивалентно этому запросу в node.js?

Пример данных из моей БД:

/* 4 */
{
    "_id" : ObjectId("5ad20cef8248544860ce3dc1"),
    "username" : "test",
    "email": "",
    "fullName" : "",
    "friends" : [{email: "",
                 status :""}],
    "alarms": [ {"id":111,
        "title": "TITLE",
        "location": "",
        "startTime": "10-10-1996 10:18:00",
        "endTime": "10-10-1996 10:18:00" }, {},{}

    ],
     "pnumber" : ""
}

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Драйвер node.js findOne имеет подпись вызова, отличную от findOne в оболочке MongoDB. Вы передаете объект выбора поля как элемент projection параметра options:

dbo.collection("users")
    .findOne({"friends.email": email}, 
             {projection: { friends: { $elemMatch: { email: email } } } },
             function(errT, resultT) {...});
0 голосов
/ 27 апреля 2018

Если вы хотите find для любых значений, которые хранятся в некоторой переменной, вы используете regex для этого. Ваш запрос должен выглядеть как

dbo.collection("users").findOne({
    email: new RegExp(emailGiven, 'i'),
    "friends.email": new RegExp(element.email, 'i')
}, {
    friends: {
        $elemMatch: {
            email: new RegExp(element.email, 'i')
        }
    }
}, function(errT, resultT) {})

i для сравнения без учета регистра здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...