Jsの配列に保存されたIDに基づいて配列フィールドに点在するオブジェクトを取得する方法

Manhクオン:

私のデータベースでは、名前のコレクションがありSetVoca、次のようにその構造があるが、:

{
    "_id" : ObjectId("5e63518c3e5d0d08980e2203"),
    "lessonId" : "5e63518c3e5d0d08980e2201",
    "vocaList" : [ 
        {
            "_id" : ObjectId("5e6351e43e5d0d08980e2207"),
            "word" : "a",
            "type" : "a",
            "meaning" : "a",
            "sente" : "a",
            "semean" : "a",
            "sug" : "a"
        }, 
        {
            "_id" : ObjectId("5e6351eb3e5d0d08980e2208"),
            "word" : "b",
            "type" : "b",
            "meaning" : "b",
            "sente" : "b",
            "semean" : "b",
            "sug" : "b"
        }
    ],
    "__v" : 0
}

/* 2 */
{
    "_id" : ObjectId("5e6351be3e5d0d08980e2206"),
    "lessonId" : "5e6351be3e5d0d08980e2204",
    "vocaList" : [ 
        {
            "_id" : ObjectId("5e6351f63e5d0d08980e2209"),
            "word" : "c",
            "type" : "c",
            "meaning" : "c",
            "sente" : "c",
            "semean" : "c",
            "sug" : "c"
        }
    ],
    "__v" : 0
}

次のように私は今、配列にボーカリストのフィールドに散らばったObjectId値が設定されています

const vocaIds = ['5e6351e43e5d0d08980e2207', '5e6351eb3e5d0d08980e2208', '5e6351f63e5d0d08980e2209']

今、私は中に散らばったオブジェクト取得したいvocaList私が保存されていることをIDに基づいてフィールドをvocaIds配列。私はこのようにそれをコーディングしてみました:

app.get('/saved-find', (req, res) => {
    SetVoca.find({ 'vocaList': { '_id': { $in: vocaIds } } }, (err, result) => {
        console.log(result);
    });
});

私はそれを実行するためにそれを修正する必要がありますので、残念ながらそれは、動作しません。どうもありがとうございました。

アシシュモディ:

あなたはこのようのObjectIdでそれらをラップすることによって、あなたのIDを送信する必要があります

const vocaIds = [mongoose.Types.ObjectId('5e6351e43e5d0d08980e2207'), mongoose.Types.ObjectId('5e6351eb3e5d0d08980e2208'), mongoose.Types.ObjectId('5e6351f63e5d0d08980e2209')]

そして、クエリで次のように行います

SetVoca.find({ 'vocaList._id': { $in: vocaIds } }, (err, result) => {
        console.log(result);
    });

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=32770&siteId=1