Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript MongoDB/NodeJS查询从字典中获取数据_Javascript_Node.js_Mongodb_Nosql - Fatal编程技术网

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

Javascript MongoDB/NodeJS查询从字典中获取数据,javascript,node.js,mongodb,nosql,Javascript,Node.js,Mongodb,Nosql,您好,在mongo DB中,我有一个类似这样的“游戏”表: { "_id" : ObjectId("53c66f922e15c4e5ee2655af"), "name" : "alien-kindergarden", "title" : "Alien Kindergarden", "description" : "Alien description", "gameCategory_id" : "1", "deviceOrientation_id" : "1", "position" : "1"

您好,在mongo DB中,我有一个类似这样的“游戏”表:

{
"_id" : ObjectId("53c66f922e15c4e5ee2655af"),
"name" : "alien-kindergarden",
"title" : "Alien Kindergarden",
"description" : "Alien description",
"gameCategory_id" : "1",
"deviceOrientation_id" : "1",
"position" : "1"
}
我有一些字典(也是MongoDB中的简单集合),比如“GameCography”:

{
    "_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"
    }
{
“_id”:ObjectId(“53c66f922e15c4e5ee2655af”),
“名称”:“外星人幼儿园”,
“标题”:“外星人幼儿园”,
“描述”:“外星人描述”,

“gameCategory”:GAME_CATEGORY_NO_CATEGORY,您本质上要求的是SQL中的“加入”。您的第一个阅读点应该是这一点。这里的一般概念是“嵌入”,相关信息实际上包含在文档中

仔细阅读正式文件的章节可以涵盖各种观点,如本方法和替代方法。但在大多数情况下,您希望参考的数据应仅为原始文件的一部分:

{
    "_id" : ObjectId("53c66f922e15c4e5ee2655af"),
    "name" : "alien-kindergarden",
    "title" : "Alien Kindergarden",
    "description" : "Alien description",
    "gameCategory" : "GAME_CATEGORY_POPULAR",
    "deviceOrientation_id" : "1",
    "position" : "1"
}
这通常是因为MongoDB“可伸缩”的概念是所有操作一次只处理一个集合,并且不尝试“连接”

node.js下有一些选项,例如e,允许您从另一个“相关”集合中查询项目。但这里的一般问题是,您无法“查询”“相关”信息。所有这一切真正实现的是“幕后查询”方法。因此实际执行多个查询。要通过“相关”查找最好的方法通常是:

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

db.category.find({ "gameCategory_id": catId })
因为没有任何内容允许您通过外部集合中的值查询“游戏”集合

“嵌入”和通常“复制”数据的想法似乎与那些习惯于关系数据库概念的人格格不入。但实际上,您应用MongoDB等解决方案的原因应该是您意识到某些“关系模式”并不“最适合”您的应用程序

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


忘却所学。

不清楚什么是“字典”对你来说意味着。这是内存中的数据吗?还是存储在另一个集合中?这是一个像其他人一样的简单集合。这是一个很好的答案。我仍然使用关系而不是嵌入这种特殊情况的原因:这是因为在我的客户端,我还应该将数据库中的所有类别提供给用户combobox。如果你有另一个方法,所以我很乐意听。@Simha好吧,有几种方法,但通常没有理由仅仅因为你在嵌入数据就不拥有一个集合。在各种情况下,最好的方法基本上是“嵌入一些但不是全部”,否则检索“全部”来自另一个集合文档的信息。它主要是一种不同层次的思维形式,表示“规范化一切”。NoSQL通常意味着“建模您实际如何使用它”好的,根据这种方法,例如,如果我需要将游戏类别名称从game_category_POPULAR更改为game_category_SUPER_POPULAR,因为在我的客户端中,应用程序的逻辑已更改,所以我需要将集合“games”中的所有文档更改为字段“category”,但如果我的数据被规范化,我将只需要更改集合中的一个字段?不是吗?@Simha了解这一点。“重复”和可能的多个更新点的成本需要与对多个数据进行单个查询的成本进行权衡。NoSQL的主食是“了解您的使用模式”然后进行相应的设计。哪一个适合您?检索一次并更新多个?还是检索多个并更新一次?差异取决于使用情况,没有“一个确定的答案”。如果您仍在苦苦挣扎,请提出另一个具体问题。您肯定会得到答案。