gpt4 book ai didi

javascript - 学习 MongoDB 如何使用 2 个集合中的数据进行查找

转载 作者:行者123 更新时间:2023-12-02 15:00:10 25 4
gpt4 key购买 nike

我有 2 个相关的集合。牌组和事实。

套牌看起来像这样:

{
_id: ObjectId("123456789123456789"),
title: "test deck"
isActive: true
}

事实看起来像这样

{
_id: ObjectId("111111324324434"),
deckId: ObjectId("123456789123456789")
title: "test fact"
}

我有 SQL 背景,所以我想SELECT * FROMfacts 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 的事实。

最佳答案

MongoDB 是一个 NoSQL 数据库,因此您无法获得 native JOIN 功能。您应该像现在一样手动执行此操作。

但是,需要考虑的一件重要事情是数据建模。 NoSQL 模型往往是非规范化的,这与关系数据库中被认为是尽可能规范化的最佳实践相反。

因此,为了简化查询,您的事实文档可能会包含其他甲板字段。我并不是说这对您来说是最好的选择,只是警告您,在非关系数据库中,在数据建模方面您应该有不同的想法。当然,您选择的每种模型都会对写作和阅读产生影响,这在很大程度上取决于您的工作量。这需要一些锻炼和练习,但您可以遵循一些准则。看official documentation .

Packt Publishing 也有一本关于这个主题的好书,名为 MongoDB 数据建模

好处是,MongoDB 在功能方面非常强大(您可以嵌套文档、数组、就地操作等),因此您有很多选择来实现您的需求。

另外,不要忘记创建 indexes根据您的查询和更新(_id 字段会自动索引,其余字段不会)。

关于javascript - 学习 MongoDB 如何使用 2 个集合中的数据进行查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35483720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com