相关疑难解决方法(0)

MongoDB关系:嵌入还是引用?

我是MongoDB的新手 - 来自关系数据库背景.我想设计一个带有一些注释的问题结构,但我不知道用于评论的关系:embed或者reference

有一些注释的问题,比如stackoverflow,会有这样的结构:

Question
    title = 'aaa'
    content = bbb'
    comments = ???
Run Code Online (Sandbox Code Playgroud)

首先,我想使用嵌入式注释(我认为embed在MongoDB中推荐),如下所示:

Question
    title = 'aaa'
    content = 'bbb'
    comments = [ { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'}, 
                 { content = 'xxx', createdAt = 'yyy'} ]
Run Code Online (Sandbox Code Playgroud)

很清楚,但我担心这种情况:如果我想编辑指定的评论,我该如何获取其内容及其问题?没有_id让我找到一个,也没有question_ref让我找到它的问题.(我是新手,我不知道如果没有_id和没有任何方法可以做到这一点question_ref.)

我必须用refembed?然后我必须创建一个新的评论集合?

embed reference mongodb

494
推荐指数
9
解决办法
15万
查看次数

阻止Mongoose为子文档数组项创建_id属性

如果您有子文档数组,Mongoose会自动为每个数组创建ID.例:

{
    _id: "mainId"
    subDocArray: [
      {
        _id: "unwantedId",
        field: "value"
      },
      {
        _id: "unwantedId",
        field: "value"
      }
    ]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Mongoose不为数组中的对象创建id?

mongoose mongodb node.js subdocument

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

MongoDB架构设计 - 许多小文档或更少的大型文档?

背景
我正在从我们的RDBMS数据库到MongoDB的转换原型.在非规范化的过程中,似乎我有两个选择,一个导致许多(数百万)较小的文档,或者一个导致较少(数十万)大文档.

如果我可以将它提炼成一个简单的模拟,那么具有较少客户文档的集合(如Java)之间的区别是:

class Customer {
    private String name;
    private Address address;
    // each CreditCard has hundreds of Payment instances
    private Set<CreditCard> creditCards;
}

或者包含许多许多付款文件的集合,如下所示:

class Payment {
    private Customer customer;
    private CreditCard creditCard;
    private Date payDate;
    private float payAmount;
}

问题
MongoDB是否设计为偏好许多很小的文档或更少的大文档?答案主要取决于我计划运行的查询吗?(即客户X有多少张信用卡?vs上个月所有客户支付的平均金额是多少?)

我已经环顾了很多,但我没有偶然发现任何可以帮助我回答我的问题的MongoDB架构最佳实践.

schema database-design mongodb

76
推荐指数
3
解决办法
2万
查看次数

我应该如何在MongoDB中实现这个模式?

我正在尝试编写一个跟踪脚本,但我无法弄清楚数据库应该如何工作.

在MySQL中,我创建了一个类似于的表

User:
   username_name: string

Campaign:
   title: string
   description: string
   link: string

UserCampaign:
   user_id: integer
   camp_id: integer

Click:
   os: text
   referer: text
   camp_id: integer
   user_id: integer
Run Code Online (Sandbox Code Playgroud)

我需要能够:

  • 查看每次点击的信息,如IP,Referer,OS等
  • 查看来自X IP,X Referer,X OS的经常点击次数
  • 将每次点击与用户和广告系列相关联

如果我按照自己的方式做点什么的话

User {
     Campaigns: [
         {
           Clicks: []
         }
     ]
}
Run Code Online (Sandbox Code Playgroud)

我遇到两个问题:

  • 它会为每个用户创建一个新的广告系列对象,这是一个问题,因为如果我需要更新我的广告系列,我需要更新每个用户的对象
  • 我希望Clicks数组包含大量数据,我觉得让它成为User对象的一部分会使查询速度变慢

database-design mongodb

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

Mongoose嵌套模式与嵌套模型

架构(子文档)中的嵌套架构与创建两个单独的模型并引用它们之间有什么区别,它们的性能如何?

子文档:

const postSchema = new Schema({
  title: String,
  content: String
});

const userSchema = new Schema({
  name: String,
  posts: [postSchema]
});

module.export = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

嵌套模型(按引用填充):

const postSchema = new Schema({
  title: String,
  content: String,
  author: { type: String, ref: 'User' }
});
module.export = mongoose.model('Post', postSchema);

const userSchema = new Schema({
  name: String,
  posts: [{ type: Schema.Types.ObjectId, ref: 'Post'}]
});
module.export = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

编辑:这不是一个重复的问题.

在这个问题中:Mongoose子文档与嵌套模式 - mongoose子文档和嵌套模式完全相同.但是嵌套模型在数据库中创建单独的集合.我的问题是嵌套模式与嵌套模型的差异是什么,而不是子文档与嵌套模式.

mongoose mongodb node.js

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

使用 mongoose 在 mongodb 中保存多个字段数组

//这里是模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

// Task schema
var taskSchema = mongoose.Schema({

 tasktype  : {type: String},
 createdon : {type: Date, default: Date.now},
 createdby : {type: Schema.Types.ObjectId,ref: 'User'},
 visitedby : [{type: Schema.Types.ObjectId,ref: 'User'}],
 taskinfo  : [{ isactive:Boolean, taskobject:String, taskdetails:String, iscompleted:Boolean}]  

});
module.exports = mongoose.model('Task', taskSchema);
Run Code Online (Sandbox Code Playgroud)

// 路线

var Task     = require ('../models/task');
var User       = require ('../models/user');
var config     = require ('../../config');
module.exports = function(app, express) {

    var api = express.Router();

  api.post('/tasks', function …
Run Code Online (Sandbox Code Playgroud)

arrays mongoose mongodb node.js

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