我有2個相關的集合。甲板和事實。學習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}});
這是最好的方法嗎?在Mongo中有更高性能的方法嗎?我看着map-reduce,但我無法弄清楚如何在那裏做這件事,它看起來像更多的代碼。我最終想要做的是刪除deck.isActive = false的事實。
的[我如何執行SQL加入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