Это очень странно, но начнем.
Я использую фреймворк sails js и серверную часть mongodb. Иногда я получаю сообщение об ошибке, что фреймворк не может найти запись, которая, как я знаю, существует в базе данных. Я включил регистрацию в mon go db.setLogLevel(1)
, и результат будет следующим. Тот же самый запрос не получает данных, и, хоть убей, не могу понять почему.
Данные не возвращены, документы не проверены
2020-05-05T15:51:16.220+0200 I COMMAND [conn82] command sails.services command: find { find: "services", filter: { userId: "5de7808067988c7f1e580895" }, projection: {}, limit: 1, $db: "sails" } planSummary: IXSCAN { userId: 1 } keysExamined:0 docsExamined:0 cursorExhausted:1 numYields:0 nreturned:0 reslen:102 locks:{ Global: { acquireCount: { r: 2 } }, MMAPV1Journal: { acquireCount: { r: 1 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { R: 1 } } } protocol:op_query 0ms
Данные возвращены, как ожидалось
2020-05-05T16:02:03.781+0200 I COMMAND [conn68] command sails.services command: find { find: "services", filter: { userId: "5de7808067988c7f1e580895" }, projection: {}, limit: 1, $db: "sails" } planSummary: IXSCAN { userId: 1 } keysExamined:1 docsExamined:1 cursorExhausted:1 numYields:0 nreturned:1 reslen:318 locks:{ Global: { acquireCount: { r: 2 } }, MMAPV1Journal: { acquireCount: { r: 1 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { R: 1 } } } protocol:op_query 0ms
userId индексируется в Коллекции служб
> db.services.getIndexes();
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "sails.services"
},
{
"v" : 2,
"key" : {
"username" : 1
},
"name" : "username_1",
"ns" : "sails.services"
},
{
"v" : 2,
"key" : {
"userId" : 1
},
"name" : "userId_1",
"ns" : "sails.services"
}
]
Поскольку запросы ничего не возвращают из mongod.log, я предполагаю, что это не имеет ничего общего с парусами. Есть ли у кого-нибудь подсказки относительно того, почему / как это может случиться и, может быть, как я могу это исправить?
MongoDB server version: 3.6.9
Ubuntu 16.04.1 LTS
EDIT:
Поскольку запрос исходит от парусов. js, мой запрос выглядит следующим образом.
usage: function (req, res) {
var userId = req.param('userId')
Services.findOne({ userId: userId}).exec(function (err, service) {
if (err) {
console.log('Clients/Usage -2 ####Error finding service with userId: ' + userId, err)
return res.send(401, err)
} else {
if (service === undefined) {
console.log('Clients/Usage -2 ####No service found')
return res.send(401, 'No service found')
} else {
console.log('Clients/Usage -2 DEBUG! sending service as a response', service)
return res.send(201, service)
}
}
})
}
пользователи попадают в API по адресу services/usage?id=