如何在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,获取用户对象,并将它们与评论的结果合并.好像我做错了.
我来自一个sql背景,所以在我连接表的sql中编写查询非常简单,但我想我在mongoose/mongodb中遗漏了
基本上我知道Subscriber_ID(映射到User Collection中的文档)
我想拉动项目组,包含用户所属的所有项目,所以如果我在pseduo sql中写这个,那就像
Select
ProjectGroup.title,
Project.Title
FROM
ProjectGroup,
Project,
User
WHERE
User.id = req.body.subscriber_id
AND Project.subscriber_id = User.id
AND ProjectGroup.project_id = Project.id
Run Code Online (Sandbox Code Playgroud)
必须有一种方法可以在mongoose/mongodb中进行类似的连接,因为类型正在映射到模式吗?
我的架构.....
项目组架构
var ProjectGroupSchema = new Schema({
title : String
, projects : [ { type: Schema.Types.ObjectId, ref: 'Project' } ]
});
Run Code Online (Sandbox Code Playgroud)
项目架构
var ProjectSchema = new Schema({
title : {type : String, default : '', required : true}
, subscribers : [{ type: Schema.Types.ObjectId, ref: 'User' }]
});
Run Code Online (Sandbox Code Playgroud)
用户架构
var UserSchema = new Schema({ …Run Code Online (Sandbox Code Playgroud) 嵌套这个例子通常被认为是好的还是坏的做法(以及为什么)?
一个名为users的集合:
user
basic
name : value
url : value
contact
email
primary : value
secondary : value
address
en-gb
address : value
city : value
state : value
postalcode : value
country : value
es
address : value
city : value
state : value
postalcode : value
country : value
Run Code Online (Sandbox Code Playgroud)
编辑:从这篇文章的答案我已经更新了应用以下规则的模式(数据与上面略有不同):
利用数组使对象更加灵活
{
"_id": ObjectId("4d67965255541fa164000001"),
"name": {
"0": {
"name": "Joe Bloggs",
"il8n": "en"
}
},
"type": "musician",
"url": {
"0": {
"name": "joebloggs",
"il8n": "en"
} …Run Code Online (Sandbox Code Playgroud)首先请注意这个问题与以下两个不同
我将解释如下:
我有两个名为: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将需要相当长的时间.
我在mongo db中有以下模型:
用户集合
{
_id:12345,
name:15,
age:"Joe",
}
Run Code Online (Sandbox Code Playgroud)
地址集合
{
_id:7663,
userId:12345,
Street:"xyz",
number:"1235",
city:"New York",
state:"NY"
}
Run Code Online (Sandbox Code Playgroud)
现在我想得到20岁以上用户的所有地址.我想的是查询20岁以上用户的所有id,并使用$ in运算符查找地址.
我的问题是,有没有办法把它变成一个查询?有更好的方法来查询吗?(obs:这只是一个例子,我的问题是我无法将地址嵌入用户)
non-relational-database document-based-database mongodb mongodb-query aggregation-framework
如何在Python中加入两个MongoDB集合(在SQL的INNER JOIN意义上)?我是否需要使用原生地图/缩小javascript代码或在PyMongo中执行此操作?如何用更少的代码解决这个问题?
我有一个为商店用户通知设计的类层次结构:
@Document
public class Notification<T> {
@Id
private String id;
@DBRef
private T tag;
...
}
@Document
public class NotificationA extends Notification<WrappedA> {
}
@Document
public class NotificationB extends Notification<WrappedB> {
}
...
Run Code Online (Sandbox Code Playgroud)
这对于返回多态数组很有用,允许我在"tag"字段中存储任何类型的数据.当包装的对象包含@DBRef字段时,问题开始:
@Document
public class WrappedA {
@Id
private String id;
@DBRef
private JetAnotherClass referenced;
...
}
Run Code Online (Sandbox Code Playgroud)
对"tag"字段的查询工作正常:
db.NotificationA.find( {"tag.$id": ObjectId("507b9902...32a")} )
Run Code Online (Sandbox Code Playgroud)
但我需要查询JetAnotherClass的字段(两个级别的@DBRef字段).我尝试过点符号和子对象,但它返回null:
点符号:
db.NotificationA.findOne( {"tag.$referenced.$id": ObjectId("508a7701...29f")} )
Run Code Online (Sandbox Code Playgroud)
子对象:
db.NotificationA.findOne( {"tag.$referenced": { "_id": ObjectId("508a7701...29f") }} )
Run Code Online (Sandbox Code Playgroud)
有帮助吗?提前致谢!
我在关系数据库上有一个应用程序,需要更改才能保留更多数据.我的问题是,只有2个表将存储更多数据(最多数十亿条目),其中一个表由fk"链接"到其他表.我可以放弃这些表的关系模型.我想保持db的其余部分完好无损,只更改这两个表.我也在这些表上做了很多查询 - 从简单的选择到分组和子查询 - 因此存在更多问题.
我对NoSQL的经验是有限的,所以我问其兄弟姐妹中哪一个(如果有的话)适合我的需要: - 巨大的数据 - 复杂的查询 - 与SQL数据库的集成.这不如前两个重要,如果值得,我可以将我的整个数据库迁移到等价物.
谢谢
我正在使用平均堆栈创建一个社交网站,我需要一些关于 mongoDB 和 mongoose 的建议。我是一家初创公司的一员,我们决定使用这些惊人的技术来完成我们的任务。
基本上,我需要一些建议。
目前,我已经完成了简单的 CRUD 的创建并实现了本地通行证 JS。目前,我的 mongoDB 中有一个名为 users 的集合。
我们的社交网站将有一个博客、市场和许多其他与单个用户相关的页面(功能)。
由于我以前从未使用过 mongoDB,我很好奇 mongoDB 是否应该为每个用户使用一个集合,或者为每个功能使用多个集合。
为了澄清它,假设我使用用户模型进行用户注册,使用博客模型进行博客等。
如果您能简短地向我解释如何构建我的猫鼬模型,如果所有数据都应该在一个集合中,或者一个用户是否应该为不同的功能创建单独的集合,那么这对我来说真的意义重大。如果您推荐多个集合,我如何将这些集合链接在一起并确保为一个用户保存所有数据等。
非常感谢!
RDBMS的一大优势是SQL作为一种非常具有声明性和强大的查询语言.我知道MongoDB有一种查询语言,但它不包括连接.有没有人试图为MongoDB制作高级查询语言
a)处理不同系列的连接?
b)通过查看集合中的索引和索引的基数来巧妙地连接句柄 - 即在SQL中模仿查询计划?
看起来您应该能够编写更高级别的查询语言,该语言使用(b)智能地输出Javascript代码和执行(a)的Mongo本机查询的组合.
用户集合
user : {
"_id" : md5random,
"nickname" : "j1",
"name" : "jany"
}
user : {
"_id" : md5random,
"nickname" : "j2",
"name" : "jenneffer"
}
Run Code Online (Sandbox Code Playgroud)
友谊集合
friendship : {
"_id" : md5rand,
"nick1" : "j1",
"nick2" : "j2",
"adTime" : date
}
Run Code Online (Sandbox Code Playgroud)
例如SQL
SELECT friendship.adTime, user.name
FROM friendship
INNER JOIN user ON
(user.nickname=friendship.nick1 or user.nickname=friendship.nick2)
Run Code Online (Sandbox Code Playgroud)
MONGO中是否有任何方法可以获得此SQL结果?
我想得到的结果,我知道mongo不支持这个请求.但这个更好的解决方案是什么?任何人都可以为我写一个例子吗?