Пустой результат запроса поиска mongodb - PullRequest
0 голосов
/ 06 февраля 2020

Я запускаю приведенный ниже запрос в оболочке mon go и получаю нужные результаты.

db.messagelist.find({userID : ObjectId("5e39a9c107357487435d5849")});

Вывод

{ "_id" : ObjectId("5e39a9c1073574eb1a5d584a"), "message" : "I am at some place", "messageType" : "0", "messageLocation" : "0", "userID" : ObjectId("5e39a9c107357487435d5849"), "timeStamp" : "'1580837313163'" }

Но когда я создаю маршрут для него выглядит следующим образом, он возвращает пустые результаты:

router.get('/messagelist/:id', function (req, res) {
    var db = req.db;
    var collection = db.get('messagelist');
    var id = req.params.id;
    //console.log("id is: "+id);
    //collection.find({userID : 'ObjectId("'+id+'")'});
    collection.find({"userID" : id}, {}, function (e, docs) {      
        docs = JSON.stringify(docs);
        console.log("docs: "+docs); //empty
        res.send(docs);         
    });
});

Что-то не так с синтаксисом ?! Любые предложения, пожалуйста.

Редактировать:

Этот запрос также работает. Таким образом, синтаксис в этом случае правильный. Я не знаю, в чем проблема с userID.

router.get('/messagelist/:id', function (req, res) {
    var db = req.db;
    var collection = db.get('messagelist');
    var id = req.params.id;
    //console.log("id is: "+id);
    //db.messagelist.find({userID : 'ObjectId("'+id+'")'});

    collection.findOne({_id : id}, function(e, docs) {      
        console.log("docs: "+docs);
        docs = JSON.stringify(docs);
        console.log("docs: "+docs);
        res.send(docs);
    });
}); 

Все параметры работают, за исключением случая userID. Это странно. это даже не ключевое слово.

Ответы [ 4 ]

0 голосов
/ 07 февраля 2020
router.get('/messagelist/:id', function (req, res) {
    var db = req.db;
    var collection = db.get('messagelist');
    var id = req.params.id;
    //collection.find({userID : 'ObjectId("'+id+'")'});
    collection.find({"userID" : id}, {}, function (e, docs) {      
        docs = JSON.stringify(docs);
        res.send(docs);         
    });
});

Проблема в том, что представление userID и id (полученного из параметра) не совпадает.

userID имеет вид: ObjectId("5e3c13d7b5d89bc92c932243")

id имеет вид: "5e3c13d7b5d89bc92c930000"

И, делая это, 'ObjectId ("' + id + '")' приводит к этому: "ObjectId(\"5e3c13d7b5d89bc92c930000\")"

Таким образом, userID не может совпадать с id или 'ObjectId ("' + id + '")'

Решение:
Я не мог изменить формат, в котором идентификатор хранится в любой из коллекций, потому что других зависимостей. Поэтому я создал отдельный referenceID (в нужном формате) в коллекции списков сообщений для хранения идентификаторов объектов соответствующих документов из другой коллекции.

router.get('/messagelist/:id', function (req, res) {
    var db = req.db;
    var collection = db.get('messagelist');
    var id = req.params.id;
    collection.findOne({refID: "'"+id+"'"}, {}, function(e, docs) {      
        docs = JSON.stringify(docs);
        res.send(docs);
    });
});
0 голосов
/ 06 февраля 2020

метод find в Mongodb означает найти все документы , поэтому вам не нужно передавать указанное свойство c, чтобы найти то, что вы хотите. Вместо этого используйте findOne и передайте свойство или findById метод и передайте идентификатор.

0 голосов
/ 06 февраля 2020

Попробуйте

collection.find(id).then(res=>console.log(res)).catch(err=>console.log(err));
0 голосов
/ 06 февраля 2020

Попробуйте использовать метод findOne, так как он возвращает один объект / произвольный документ. Если вы запрашиваете _id (идентификатор ducument), используйте вместо него findById ().

https://mongoosejs.com/docs/api.html#model_Model .findOne

...