如何在MongoDB中执行SQL Join等效项?
例如,假设你有两个集合(用户和评论),我想用pid = 444以及每个集合的用户信息来提取所有评论.
comments
{ uid:12345, pid:444, comment="blah" }
{ uid:12345, pid:888, comment="asdf" }
{ uid:99999, pid:444, comment="qwer" }
users
{ uid:12345, name:"john" }
{ uid:99999, name:"mia" }
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个字段拉出所有评论(例如......查找({pid:444}))以及与每个评论相关的用户信息?
目前,我首先得到符合我标准的评论,然后找出该结果集中的所有uid,获取用户对象,并将它们与评论的结果合并.好像我做错了.
首先请注意这个问题与以下两个不同
我将解释如下:
我有两个名为:DB_A和DB_B我的mongodb的数据库.
每个数据库都有一个名称相同的集合store.
两个集合都有很多具有完全相同结构的文档{key:"key1",value:"value1"}等.
实际上,我应该只创建DB_A并插入所有文档DB_A.但后来当我进行第二轮插入时,我输入了错误的名称作为数据库名称.
所以现在,每个数据库的大小都是32GB,我希望合并两个数据库.
一个问题/制约因素是,可用空间现在只有15GB,所以我不能只copy从所有的东西DB_B来DB_A.
我想知道我能做到move吗?或者合并两个简单数据库最简单/最好/ 最快的方法是什么?我更喜欢最有效的方式,因为简单地重新插入32GB DB_A将需要相当长的时间.
我有两个巨大的(几十万条记录)集合Col1和Col2,我需要从它们中获取连接的数据。有一个连接标准可以让我将返回的记录数量大幅减少到几百,所以在 SQL 语言中我会运行类似的东西
SELECT ... FROM Col1 INNER JOIN Col2 ON Col1.field1 = Col2.field2
Run Code Online (Sandbox Code Playgroud)
而且它的运行速度非常快,因为Col1.field1和Col2.field2是索引字段。有没有直接的方法或解决方法可以在 MongoDb 中使用索引快速执行相同的操作,而不是扫描所有项目?
注意:我无法重新设计集合以将它们合并为一个。
我在MongoDB中有以下三个集合
fd2k10sample
fd2k16sample
fd2ksample
Run Code Online (Sandbox Code Playgroud)
它们中的每个文档都具有相同的结构,因此没有以下结构问题:
fd2ksample
id cat1 cat2 cat3 cat4
1 doza moza goza hoza
2 beta geta jeta leta
3 huggy muggy guggy luggy
Run Code Online (Sandbox Code Playgroud)
fd2k10sample
id cat1 cat2 cat3 cat4
1 prizzy mizzy tizzy hizzy
2 chuta buta guta tuta
3 befer lefer gefer tefer
Run Code Online (Sandbox Code Playgroud)
fd2k16sample
id cat1 cat2 cat3 cat4
1 poopa doopa hoopa loopa
2 nijjy pijjy hijjy tijjy
3 ufha puhfa duhfa tuhfa
Run Code Online (Sandbox Code Playgroud)
我如何像这样组合它们:
fd2kfullsample
id cat1 cat2 cat3 cat4
1 doza moza goza hoza …Run Code Online (Sandbox Code Playgroud) 我们将一对多关系存储为MongoDB中的两个独立集合.关系是:1团队有很多人.我们故意将这些保存为单独的集合,因为我们希望能够单独查询它们.在做了大量研究之后我们决定了这个设计 - 我希望它有意义.以下是简化的Mongoose模式:
var TeamSchema = new Mongoose.Schema({
name: String
});
var PersonSchema = new Mongoose.Schema({
name: String
teamId: {
type: Mongoose.Schema.ObjectId,
ref: 'Team',
}
});
Run Code Online (Sandbox Code Playgroud)
在将它们发送到前端之前,我想按以下方式加入这两个集合:
[
{ "name": "John Doe", "Team": "Orange" },
{ "name": "Jane Smith", "Team": "Orange" },
{ "name": "Doug White", "Team": "Blue" }
]
Run Code Online (Sandbox Code Playgroud)
我不介意做两个单独的查询来将每个集合放入内存中.问题是,一旦我将它们放入内存中,加入集合的最有效方法是什么?
这是我开始做的,但加入代码不存在:
Person.find(function(err, people) {
Team.find(function(err, teams) {
// Now I have people and teams
// How to join them?
});
});
Run Code Online (Sandbox Code Playgroud) 如何在mongodb中连接两个表.
例如,表1:用户表2:示例
这里的用户表有用户名和示例表也有用户名,所以如何在php中使用mongodb组合两个表字段.
请解释一下查询.
谢谢,