MongoDB: пользовательская переменная в запросе - PullRequest
2 голосов
/ 20 февраля 2020

Я новичок в оболочке MongoDB и мне нужна помощь!

У меня есть 2 коллекции: фильмы и комментарии . Я хочу сохранить значение из второй коллекции и использовать его, чтобы найти что-то в первой.

Это то, что я пробовал:

var result = db.comments.findOne({name: "Arya Stark"})
var movieId = JSON.stringify(result.movie_id.valueOf())
db.movies.findOne({_id: ObjectId($$movieId)})

Выше указано, что $$movieId не определено. Я также попытался:

db.movies.find({_id: {$toObjectId: movieId}})

, и хотя моя версия 4.2.3, он печатает:

неизвестный оператор: $ toObjectId.

Я перепробовал все, я не знаю, что еще делать.

РЕДАКТИРОВАТЬ:

Вот печатный результат:

{
        "_id" : ObjectId("5a9427648b0beebeb6957d48"),
        "name" : "Arya Stark",
        "email" : "maisie_williams@gameofthron.es",
        "movie_id" : ObjectId("573a1392f29313caabcd9906"),
        "text" : "Laborum incidunt asperiores accusamus facilis vitae ut quidem. Praesentium provident explicabo odit dolores unde amet architecto. Iure id vero temporibus assumenda eum quia.",
        "date" : ISODate("1978-07-29T23:20:45Z")
}

В основном я хочу взять movie_id из коллекции комментарии и использование его в коллекции фильмов для поиска, из которого mov ie это.

1 Ответ

1 голос
/ 20 февраля 2020

Вам не нужно делать два вызова базы данных, вместо этого используйте $ lookup для JOINS , попробуйте выполнить следующий запрос в оболочке:

db.comments.aggregate([{ $match: { name: "Arya Stark" } }, {
    $lookup:
    {
        from: "movies",
        localField: "movie_id",
        foreignField: "_id",
        as: "movie"
    }
}, { $unwind: '$movie' }])

Ваши две проблемы:

  1. , когда вы используете $$ в своем запросе, соответствующая переменная должна быть объявлена ​​локально в самом запросе.
  2. $ toObjectId is оператор агрегации, который нельзя использовать таким образом в .find().
...