Express 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);
        });

});

ความช่วยเหลือหรือคำแนะนำใด ๆ ที่ชื่นชม ขอบคุณล่วงหน้า.

แก้ไข: (คำค้นหาที่แก้ไขของฉัน)

//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)
    });

});

บทความกำลังส่งคืน 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
มีความคิดอะไรบ้างไหม? :) @VinceBowdren   -  person djmcr    schedule 14.03.2017
comment
คุณต้องส่งสตริงของคุณ 58c2a5bdf36d281631b3714a ไปที่ ObjectId ฉันไม่รู้สภาพแวดล้อมแบบด่วนเลย แต่มันอาจจะง่ายแค่ ObjectId(req.query.id)   -  person Vince Bowdren    schedule 14.03.2017
comment
URL คำขอคืออะไร?   -  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} )
    .

แก้ไข:
การแปลงสตริงเป็นประเภท ObjectId ก่อนที่จะทำการสืบค้น

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

ข้อมูลอ้างอิง: หากฉันมีรหัสเอกสาร mongo เป็นสตริง ฉันจะค้นหาเป็น _id ได้อย่างไร

person NERDYLIZARD    schedule 14.03.2017