MongoDB/NodeJS查询从字典中获取数据
MongoDB/NodeJS query to get data from dictionary
嗨,在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这样的解决方案的原因应该是你意识到某些"关系模式"不是"最适合"你的应用程序。
如果您还没有以这种方式看待这个问题,那么也许您应该坚持使用关系数据库方法并使用这些工具。至少在你"找到"实际的缺点,并意识到为什么你需要围绕它"设计"之前。
忘掉你学过的东西
相关文章:
- Ajax-如何获取数据
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 从数据库中获取数据并插入JavaScript变量
- 从单击的行上的列中获取数据
- Solr查询以按日期月份获取数据&年
- React路由器服务器端渲染和ajax获取数据
- 使用JavaScript在IE9中获取数据列表选项
- 从json子数组获取数据
- 使用angularjs中的rest调用通过id获取数据
- 正在从ruby应用程序中的数据库中获取数据
- 如何从servlet获取数据到ajax成功
- 从选择下拉菜单中获取数据
- 异步获取数据使用JavaScript同步获取数据
- 从服务器获取数据并在选择控件中使用ng选项无法显示选项
- 如何在Angular.js中循环动态添加Fields并获取数据并将其发送到服务器
- JavaScript-获取数据属性的值返回未定义的值
- 如何从文本区域获取数据并使用javascript进行解密
- 在put方法之前从作用域获取数据
- 事件循环的MEAN.JS setInterval进程(从另一个服务器获取数据)
- 使用ReactJS和Flux架构从服务器获取数据的正确方法是什么