MongoDB/NodeJS查询从字典中获取数据

MongoDB/NodeJS query to get data from dictionary

本文关键字:获取 数据 字典 NodeJS 查询 MongoDB      更新时间:2023-09-26

嗨,在mongo DB我有一个表"游戏"这样:

{
"_id" : ObjectId("53c66f922e15c4e5ee2655af"),
"name" : "alien-kindergarden",
"title" : "Alien Kindergarden",
"description" : "Alien description",
"gameCategory_id" : "1",
"deviceOrientation_id" : "1",
"position" : "1"
}

和我有一些字典(也在MongoDB简单的集合),如"gameCategory",例如:

{
    "_id" : 0,
    "name" : "GAME_CATEGORY_NO_CATEGORY"
}
{
    "_id" : 1,
    "name" : "GAME_CATEGORY_POPULAR"
}

如何从收集"游戏"与字段从我的字典中获取数据,如:

 {
    "_id" : ObjectId("53c66f922e15c4e5ee2655af"),
    "name" : "alien-kindergarden",
    "title" : "Alien Kindergarden",
    "description" : "Alien description",
    "gameCategory" : GAME_CATEGORY_NO_CATEGORY, <---------------
    "deviceOrientation_id" : "1",
    "position" : "1"
    }

谢谢。

您实际上要求的是SQL中的"JOIN"。您的第一点阅读应该是MongoDB不做连接。这里的一般概念是"嵌入",即相关信息实际上包含在文档中。

仔细阅读官方文档的数据建模部分可以涵盖各种要点,例如这一点和其他方法。但在大多数情况下,您希望引用的数据应该只是原始文档的一部分:

{
    "_id" : ObjectId("53c66f922e15c4e5ee2655af"),
    "name" : "alien-kindergarden",
    "title" : "Alien Kindergarden",
    "description" : "Alien description",
    "gameCategory" : "GAME_CATEGORY_POPULAR",
    "deviceOrientation_id" : "1",
    "position" : "1"
}

这通常是因为MongoDB的"可扩展"概念是所有操作一次只处理一个集合,并且不会尝试"join"。

在node.js下有一些可用的选项,比如Mongoose,允许你从另一个"相关"集合中.populate()项目。但这里普遍存在的问题是,您无法对"相关"信息进行"查询"。所有这些真正实现的是一种"幕后查询"方法。所以实际上执行了不止一个查询。查找"相关"信息的最佳方法通常是:

var catId = db.category.findOne({ "name": "GAME_CATEGORY_POPULAR" })._id;
db.category.find({ "gameCategory_id": catId })

因为没有任何东西可以让你通过外部集合中保存的值来查询"game"集合。

对于那些习惯于关系数据库概念的人来说,"嵌入"和通常"复制"数据的想法似乎很陌生。但你真正应用MongoDB这样的解决方案的原因应该是你意识到某些"关系模式"不是"最适合"你的应用程序。

如果您还没有以这种方式看待这个问题,那么也许您应该坚持使用关系数据库方法并使用这些工具。至少在你"找到"实际的缺点,并意识到为什么你需要围绕它"设计"之前。

忘掉你学过的东西