У меня есть две коллекции, которые связаны друг с другом. Палубы и факты.Изучение MongoDB, как найти данные из 2 коллекций
палуб выглядит следующим образом:
{
_id: ObjectId("123456789123456789"),
title: "test deck"
isActive: true
}
Факт выглядит следующим образом
{
_id: ObjectId("111111324324434"),
deckId: ObjectId("123456789123456789")
title: "test fact"
}
я родом из фона SQL, поэтому я хочу, чтобы SELECT * FROM facts LEFT JOIN decks ON decks._id = facts.deckId WHERE deck.isActive = true
Единственный способ я мог понять это был через микро-скрипт.
var deckIds = db.decks.find({isActive: false}, {_id: true}).toArray().map(function(item) {
return item._id;
});
db.facts.find({deckId: {$in: deckIds}});
Это лучший способ сделать это? Есть ли более эффективный способ сделать это все в Монго? Я посмотрел на сокращение карты, но я не могу понять, как это сделать, и это похоже на дополнительный код. В конце я хочу удалить факты, которые имеют deck.isActive = false.
Возможный дубликат [Как выполнить эквивалент SQL Join в MongoDB?] (Http://stackoverflow.com/questions/2350495/how-do-i-perform-the-sql-join-equivalent-in- mongodb) – joao
Мой вопрос: «Это лучший способ». У меня нет mongo 3.2, поэтому я не могу использовать $ lookup. Итак, микро-сценарий выше, лучший? –
Если вы не используете mongo 3.2, у вас не так много вариантов. Вы либо разрабатываете схему данных, так что вам не нужно выполнять объединения, или вы делаете это на стороне клиента (например, сценарий, который вы опубликовали). – joao