Найти с массивом идентификаторов в мангусте - PullRequest
2 голосов
/ 25 мая 2020

Я делаю API с Express. js и mon goose. Мне нужно найти пользователей, чей идентификатор содержится в массиве.

// the array of ids
const followedIds = follow.map((f) => f.followed);

console.log(followedIds);
// return [ '5ebaf673991fc602045ed47f', '5ebc6fb9af8add09edd842e9' ]

Все идентификаторы в этом массиве существуют.

Затем я делаю:

User.where('_id').in(followedIds).exec()
    .then((followedUser) => {

        console.log('followedUser', followedUser);
        // return []
});

followedUser должно быть два объекта пользователей с совпадающими идентификаторами.

Как я могу решить эту проблему?

Спасибо

PS: Это моя модель пользователя

const mongoose = require('mongoose');

const user = new mongoose.Schema({
    username: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true },
    avatar: { type: String, default: '/images/avatar_default.jpg' },
    banner: { type: String, default: '/images/banner_default.jpg' },
    created_at: { type: Date, required: true },
    deleted_at: { type: Date, required: false },
}, { versionKey: false });

module.exports = mongoose.model('user', user);

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Вы можете использовать $ в операторе и предоставить массив идентификаторов, как есть для mon go. Например, вы можете запросить пользователей, которые указали идентификаторы из массива:

const followedUsers = await User.find({ _id: { $in: followedIDs } });
console.log(followedUsers);

Но убедитесь, что ваш followedIDs является массивом ObjectId. MongoDB хранит _id как ObjectId, а не строку.

db.inventory.insertMany([
   { item: "journal", qty: 25, status: "A" },
   { item: "notebook", qty: 50, status: "A" },
   { item: "paper", qty: 100, status: "D" },
   { item: "planner", qty: 75, status: "D" },
   { item: "postcard", qty: 45, status: "A" }
]);

db.inventory.find({ _id: { $in: [ObjectId("your_id_here")] } });

Чтобы сгенерировать такой массив из массива строк, используйте map:

const followedIDs = yourArrayWithIDAsString.map(ObjectId);
0 голосов
/ 25 мая 2020

.in метод, например

User.find().where('_id').in(followedIds)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...