标签: mongoose-schema

具有一对多关系的Mongoose文档引用

我正在为一个新项目设计数据库结构,我对MongoDB很新,显然是Mongoose.

我已经阅读过Mongooses 人口文档,它有一对多的关系,一个Person文档到很多Story文档,但是令我困惑的部分是在哪里而不是Story引用Person它所属的文档的文档,Person架构设置了它所以它有一个Story"拥有"的文件数组.

我正在设置与此类似的东西.但我一直认为创建新Story文档以获取Person文档ID 会更容易.但也许这只是因为我更熟悉使用连接的MySQL关系.

如果这是最好的方法(并且我确定它是,因为它在文档中),在Story创建新文档时,最新的方法是更新People它所属的相关文档中的故事数组?我看了但找不到任何更新现有文档的例子来添加对其他文件的引用(或删除它们)

我确信这是一个简单的解决方案,我只是忽略了什么,但任何帮助都会很棒.谢谢!

mongoose mongodb node.js mongodb-query mongoose-schema

38
推荐指数
3
解决办法
5万
查看次数

mongoose模式中的嵌套对象

我在这里看到了很多这个问题的答案,但我仍然没有得到它(也许是因为他们使用了更多"复杂"的例子)...所以我想要做的是一个"客户"的架构,它将有两个将嵌套"子字段"的字段,以及可能重复的其他字段.这就是我的意思:

let customerModel = new Schema({
    firstName: String,
    lastName: String,
    company: String,
    contactInfo: {
        tel: [Number],
        email: [String],
        address: {
            city: String,
            street: String,
            houseNumber: String
        }
    }   
});
Run Code Online (Sandbox Code Playgroud)

电话电子邮件可能是一个数组.和地址不会重复,但有一些子字段,你可以看到.

我怎样才能做到这一点?

mongodb node.js mongoose-schema

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

Mongoose - 在一个函数调用中删除多个文档

在文档中有deleteMany()方法

Character.deleteMany({ name: /Stark/, age: { $gte: 18 } }, function (err) {});
Run Code Online (Sandbox Code Playgroud)

我想删除多个具有一个共同属性而另一个属性不同的文档.像这样的东西:

Site.deleteMany({ userUID: uid, id: [10, 2, 3, 5]}, function(err) {}

这个的正确语法是什么?

database mongoose mongodb node.js mongoose-schema

20
推荐指数
4
解决办法
3万
查看次数

定义Mongoose架构时应该使用Schema.Types.ObjectId还是Schema.ObjectId

看起来像这样定义我的架构:

var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.Types.ObjectId, ref:"Thing"}
});
Run Code Online (Sandbox Code Playgroud)

或者这样:

var PossessionSchema = new mongoose.Schema({
  thing: {type: mongoose.Schema.ObjectId, ref:"Thing"}
});
Run Code Online (Sandbox Code Playgroud)

两者都有效.我看到猫鼬指南使用Schema.Types.ObjectId

http://mongoosejs.com/docs/schematypes.html

但我很困惑,两者都有效.

Schema应该使用哪一个?这两者有什么区别?

mongoose mongoose-schema

15
推荐指数
3
解决办法
3459
查看次数

找一个或用Mongoose创建

我有

Page.findById(pageId).then(page => {
  const pageId = page.id;
   ..
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果没有给出页面ID,它应该只是在给定一些条件的情况下获取第一个可用页面,这是由完成的

Page.findOne({}).then(page => {
  const pageId = page.id;
  ..
});
Run Code Online (Sandbox Code Playgroud)

但如果没有找到任何页面,它应该创建一个新页面并使用它,这是完成的

Page.create({}).then(page => {
  const pageId = page.id;
  ..
});
Run Code Online (Sandbox Code Playgroud)

但是如何将所有这些组合成尽可能少的线?

我内心有很多逻辑

page => { ... }
Run Code Online (Sandbox Code Playgroud)

所以我非常想做到这一点,所以我可以避免这样做

if (pageId) {
  Page.findById(pageId).then(page => {
    const pageId = page.id;
     ..
  });
} else {
  Page.findOne({}).then(page => {
    if (page) {
      const pageId = page.id;
      ..
    } else {
      Page.create({}).then(page => {
        const pageId = page.id;
        ..
      });
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

我想我也许可以用类似的东西为模式分配一个静态 …

javascript mongoose mongodb node.js mongoose-schema

14
推荐指数
4
解决办法
2万
查看次数

mongoose TypeError:Schema不是构造函数

我遇到了一件奇怪的事.我有几个猫鼬模型 - 在其中一个(只有一个!)我得到这个错误:

TypeError: Schema is not a constructor
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪,因为我有几个工作模式.我尝试登录mongoose.Schema非工作模式,它确实与我工作模式中的mongoose.Schema不同 - 这怎么可能?代码几乎相同.这是非工作模式的代码:

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

var errSchema = new Schema({
  name: String,
  images:[{
    type:String
  }],
  sizes:[{
    type: String
  }],
  colors:[{
    type: Schema.ObjectId,
    ref: 'Color'
  }],
  frontColors:[{
    type: Schema.ObjectId,
    ref: 'Color'
  }],
  script: Boolean
},{
  timestamps: true
});

var Err = mongoose.model('Err', errSchema);

module.exports = Err;
Run Code Online (Sandbox Code Playgroud)

工作架构的代码:

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

var colorSchema = new Schema({
  name: String,
  image: String, …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose node.js mongoose-schema

14
推荐指数
4
解决办法
2万
查看次数

将子文档添加到现有mongodb文档

本质上,我只是尝试将新的子文档添加到具有以下模式的现有mongodb文档中

/models/server/destination.js

// this is the "destination" model for mongoose
var mongoose = require('mongoose')
var Adventure = require('../models/adventure')

// this is the schema that every entry will get when a new trip is made.
var tripSchema = mongoose.Schema({
    name: { type: String, required: true },
    city: { type: String, required: true },
    dateStart: { type: Date, required: true },
    dateFinish: { type: Date, required: true },
    adventures: [Adventure]
})

// module.exports makes this model available to other file 
module.exports = …
Run Code Online (Sandbox Code Playgroud)

addchild mongoose mongodb mean-stack mongoose-schema

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

JSDoc + Mongoose:如何记录Mongoose模型?

我有Mongoose 架构模型:

var MyClientSchema = new mongoose.Schema({
    fist_name: {
        type: String
    },
    phone_number: {
        type: String
    }
});

var MyClient = mongoose.model('MyClient', MyClientSchema);
Run Code Online (Sandbox Code Playgroud)

我应该如何记录(使用JSDoc)MyClient和/或MyClientSchema获取tab-completion并从WebStorm两个继承自mongoose.model类似的方法中输入建议remove, findOne, find并从类似继承phone_number and first_name

mongoose node.js jsdoc mongoose-schema

13
推荐指数
2
解决办法
1634
查看次数

在保存和保存后保存Mongoose中间件方法之间的数据

查看更新示例代码@BOTTOM

我在我的当前项目的NodeJS利用猫鼬(这是真棒顺便说一句!),我有一个MDB集合多数民众赞成要存储的文件在不同的集合的变化(基本上是一个更新日志存储了什么修改)

我如何努力实现这一点是创建一个存储文档的JSON版本的函数,这是通过pre('save')钩子完成的.然后创建另一个钩子,通过它执行post('save'),比较存储的数据pre('save'),并将其与文档新数据进行比较.

这是我到目前为止所拥有的:

var origDocument 
var testVar = 'Goodbye World'

module.exports = ( schema, options ) => {
    schema.pre( 'save', function( next ) {
        // Store the original value of the documents attrCache.Description value
        origDocument = this.toJSON().attrCache.Description

        // Change the testVar value to see if the change is reflected in post(save)
        testVar = 'Hello World'
        next()
    } )

    schema.post( 'save', function(  ) {
        // Attempt to compare the documents previous value …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js mongoose-schema

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

创建猫鼬模式时,VS代码自动竞争无法正常工作

知道为什么当我创建猫鼬模式时智能感知完全没用吗?即使它过去曾经有用过。

在此输入图像描述

我已经搜索了很多关于这个主题的内容,但不幸的是找不到任何可以提供帮助的内容。

Node.js 相关扩展我有:EsLint JavaScript and TypeScript Nightly Node 扩展包 npm intellesense path intellesense REST Client Visual studio Intellicode

autocomplete mongoose-schema visual-studio-code

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