相关疑难解决方法(0)

如何在MongoDB中执行SQL Join等效项?

如何在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,获取用户对象,并将它们与评论的结果合并.好像我做错了.

join mongodb

471
推荐指数
12
解决办法
32万
查看次数

Mongoose/mongoDB查询加入..但我来自sql背景

我来自一个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)

mongoose mongodb node.js

22
推荐指数
1
解决办法
4万
查看次数

mongodb最佳实践:筑巢

嵌套这个例子通常被认为是好的还是坏的做法(以及为什么)?

一个名为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)

database mongodb nosql

11
推荐指数
3
解决办法
1万
查看次数

MongoDB:如何将两个集合/数据库合并为一个?

首先请注意这个问题与以下两个不同

MongoDB:将来自多个集合的数据合并为一个..how?

合并MongoDB中的两个集合

MongoDB和"加入"

我将解释如下:

我有两个名为:DB_ADB_B我的mongodb的数据库.

每个数据库都有一个名称相同的集合store.

两个集合都有很多具有完全相同结构的文档{key:"key1",value:"value1"}等.

实际上,我应该只创建DB_A并插入所有文档DB_A.但后来当我进行第二轮插入时,我输入了错误的名称作为数据库名称.

所以现在,每个数据库的大小都是32GB,我希望合并两个数据库.

一个问题/制约因素是,可用空间现在只有15GB,所以我不能只copy从所有的东西DB_BDB_A.

我想知道我能做到move吗?或者合并两个简单数据库最简单/最好/ 最快的方法是什么?我更喜欢最有效的方式,因为简单地重新插入32GB DB_A将需要相当长的时间.

database mongodb nosql

9
推荐指数
2
解决办法
1万
查看次数

Mongo db使用$ in在另一个查询中使用查询结果

我在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

9
推荐指数
2
解决办法
1万
查看次数

如何在Python中加入MongoDB集合?

如何在Python中加入两个MongoDB集合(在SQL的INNER JOIN意义上)?我是否需要使用原生地图/缩小javascript代码或在PyMongo中执行此操作?如何用更少的代码解决这个问题?

python mapreduce mongodb pymongo

7
推荐指数
1
解决办法
6605
查看次数

MongoDB:@DBRef查询

我有一个为商店用户通知设计的类层次结构:

@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)

有帮助吗?提前致谢!

mongodb dbref

6
推荐指数
1
解决办法
1万
查看次数

SQL NOSQL混合可能与否?

我在关系数据库上有一个应用程序,需要更改才能保留更多数据.我的问题是,只有2个表将存储更多数据(最多数十亿条目),其中一个表由fk"链接"到其他表.我可以放弃这些表的关系模型.我想保持db的其余部分完好无损,只更改这两个表.我也在这些表上做了很多查询 - 从简单的选择到分组和子查询 - 因此存在更多问题.

我对NoSQL的经验是有限的,所以我问其兄弟姐妹中哪一个(如果有的话)适合我的需要: - 巨大的数据 - 复杂的查询 - 与SQL数据库的集成.这不如前两个重要,如果值得,我可以将我的整个数据库迁移到等价物.

谢谢

sql nosql

6
推荐指数
1
解决办法
1398
查看次数

在 MongoDB 中对数据进行分区的最佳做法是什么?

我正在使用平均堆栈创建一个社交网站,我需要一些关于 mongoDB 和 mongoose 的建议。我是一家初创公司的一员,我们决定使用这些惊人的技术来完成我们的任务。

基本上,我需要一些建议。

目前,我已经完成了简单的 CRUD 的创建并实现了本地通行证 JS。目前,我的 mongoDB 中有一个名为 users 的集合。

我们的社交网站将有一个博客、市场和许多其他与单个用户相关的页面(功能)。

由于我以前从未使用过 mongoDB,我很好奇 mongoDB 是否应该为每个用户使用一个集合,或者为每个功能使用多个集合。

为了澄清它,假设我使用用户模型进行用户注册,使用博客模型进行博客等。

如果您能简短地向我解释如何构建我的猫鼬模型,如果所有数据都应该在一个集合中,或者一个用户是否应该为不同的功能创建单独的集合,那么这对我来说真的意义重大。如果您推荐多个集合,我如何将这些集合链接在一起并确保为一个用户保存所有数据等。

非常感谢!

mongoose mongodb node.js

6
推荐指数
2
解决办法
6051
查看次数

MongoDB的高级查询语言

RDBMS的一大优势是SQL作为一种非常具有声明性和强大的查询语言.我知道MongoDB有一种查询语言,但它不包括连接.有没有人试图为MongoDB制作高级查询语言

a)处理不同系列的连接?

b)通过查看集合中的索引和索引的基数来巧妙地连接句柄 - 即在SQL中模仿查询计划?

看起来您应该能够编写更高级别的查询语言,该语言使用(b)智能地输出Javascript代码和执行(a)的Mongo本机查询的组合.

mongodb mongodb-query

2
推荐指数
1
解决办法
5147
查看次数

猫鼬内心加入

用户集合

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不支持这个请求.但这个更好的解决方案是什么?任何人都可以为我写一个例子吗?

mongoose mongodb node.js

1
推荐指数
1
解决办法
1万
查看次数