Экспресс MongoDB find() на основе поля _id

Итак, в моем экспресс-приложении я пытаюсь найти() на основе моего поля _id.

См. мою запись MongoDB ниже.

{
        "_id": {
            "$oid": "58c2a5bdf36d281631b3714a"
        },
        "title": "EntertheBadJah",
        "subTitle": "Lorem ipsum dolor",
        "thmbNailImg": "",
        "headerImg": "",
         ... BLAH BLAH BLAH

Когда я использую .find( _id: id ), мой параметр id = 58c2a5bdf36d281631b3714a.

Как мне преобразовать/использовать это, чтобы получить запись MongoDB?

Вот мой экспресс-вызов:

//GET ARTICLE
app.get('/api/article', (req, res) => {

    var id = req.query.id
    var article = [];

    db.collection('articles')
        .find( _id: id )
        .then(result => {
            article = articles.concat(result);
        }).then(() => {
            res.send(article);
        }).catch(e => {
            console.error(e);
        });

});

Любая помощь или совет приветствуются. Заранее спасибо.

EDIT: (мой пересмотренный запрос)

//GET ARTICLE
app.get('/api/article', (req, res) => {

    var id = req.query.id

    db.collection('articles').findOne({
        "_id.$oid": id
    }, function(err, article) {
        res.send(article);
        console.log(article)
    });

});

article в настоящее время возвращает NULL.


person djmcr    schedule 14.03.2017    source источник
comment
попробуйте это, db.collection('articles').find( {"_id.$oid": id }) docs.mongodb.com/v3.2/core /document/#embedded-documents   -  person ajai Jothi    schedule 14.03.2017
comment
Только что попробовал, возвращает MongoError: селектор запроса должен быть объектом @ajaiJothi   -  person djmcr    schedule 14.03.2017
comment
обновил мой ответ. Пожалуйста, проверьте сейчас   -  person ajai Jothi    schedule 14.03.2017
comment
@danjonescidtrix Когда вы говорите 58c2a5bdf36d281631b3714a как целое число, это правильно - целое число? Это должна быть строка?   -  person Vince Bowdren    schedule 14.03.2017
comment
это целое число, должно ли оно быть строкой в ​​моем запросе? @Винс Боудрен   -  person djmcr    schedule 14.03.2017
comment
Какое это целое число? 58c2a5bdf36d281631b3714a выглядит как строка.   -  person Vince Bowdren    schedule 14.03.2017
comment
ааа, тогда это будет строка .. см. мое редактирование вопроса @VinceBowdren   -  person djmcr    schedule 14.03.2017
comment
любые идеи человек? :) @ВинсБоудрен   -  person djmcr    schedule 14.03.2017
comment
Вам нужно преобразовать строку 58c2a5bdf36d281631b3714a в ObjectId. Я вообще не знаком с экспресс-средой, но она может быть такой же простой, как ObjectId(req.query.id).   -  person Vince Bowdren    schedule 14.03.2017
comment
какой адрес запроса?   -  person NERDYLIZARD    schedule 14.03.2017
comment
axios.get('/api/article', { params: { id: id } }) ... но я не думаю, что моя проблема заключается в запросе @NERDYLIZARD   -  person djmcr    schedule 14.03.2017
comment
попробуйте /api/article?id="yourid" для запроса.   -  person NERDYLIZARD    schedule 14.03.2017
comment
Я не думаю, что моя проблема в запросе, когда я регистрирую «req.query.id», он возвращает 58c2a5bdf36d281631b3714a, я просто не знаю, как вернуть свою запись для этого _id @NERDYLIZARD   -  person djmcr    schedule 14.03.2017
comment
@danjonescidtrix Я копнул немного глубже из другого источника. Смотрите редактирование, надеюсь, это поможет.   -  person NERDYLIZARD    schedule 14.03.2017


Ответы (1)


db.collection('articles')
    .find( {"_id.$oid": id} )
    .

или еще конкретнее:

db.collection('articles')
    .findOne( {"_id.$oid": id} )
    .

EDIT:
Преобразование строки в тип ObjectId перед запросом

var ObjectID = require('mongodb').ObjectID;   
db.collection('articles')
    .findOne( {"_id.$oid": new ObjectID(id)})
    .

Ссылка: Если у меня есть идентификатор документа монго в виде строки, как мне запросить его как _id?

person NERDYLIZARD    schedule 14.03.2017