我正在为一个新项目设计数据库结构,我对MongoDB很新,显然是Mongoose.
我已经阅读过Mongooses 人口文档,它有一对多的关系,一个Person
文档到很多Story
文档,但是令我困惑的部分是在哪里而不是Story
引用Person
它所属的文档的文档,Person
架构设置了它所以它有一个Story
"拥有"的文件数组.
我正在设置与此类似的东西.但我一直认为创建新Story
文档以获取Person
文档ID 会更容易.但也许这只是因为我更熟悉使用连接的MySQL关系.
如果这是最好的方法(并且我确定它是,因为它在文档中),在Story
创建新文档时,最新的方法是更新People
它所属的相关文档中的故事数组?我看了但找不到任何更新现有文档的例子来添加对其他文件的引用(或删除它们)
我确信这是一个简单的解决方案,我只是忽略了什么,但任何帮助都会很棒.谢谢!
我在我的当前项目的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) 我想开始利用Mongooses文档版本控制(__v key).我有一个实际增加版本值的问题,然后我发现你必须this.increment()
在执行查询时添加.
有没有办法自动递增?目前,我刚刚将它添加到预中间件以获取更新类型的查询:
module.exports = Mongoose => {
const Schema = Mongoose.Schema
const modelSchema = new Schema( {
name: Schema.Types.String,
description: Schema.Types.String
} )
// Any middleware that needs to be fired off for any/all update-type queries
_.forEach( [ 'save', 'update', 'findOneAndUpdate' ], query => {
// Increment the Mongoose (__v)ersion for any updates
modelSchema.pre( query, function( next ) {
this.increment()
next()
} )
} )
}
Run Code Online (Sandbox Code Playgroud)
这似乎有用..但我有点认为在Mongoose中已经有办法做到这一点..我错了吗?
我理解箭头函数在ES6中是如何工作的,以及词汇这个,但是我想知道是否有人知道如何将参数传递给箭头函数?
在ES5中,您可以简单地执行以下操作:
function foo( bar, baz ){
console.log('Args:', arguments.join(', '))
}
Run Code Online (Sandbox Code Playgroud)
但是,在ES6中,如果使用箭头功能,如下所示:
const foo = ( bar, baz ) => {
console.log('Args:', arguments.join(', '))
}
Run Code Online (Sandbox Code Playgroud)
该arguments
变量返回一个对象,该对象与参数无关.
所以,我想知道是否有人有办法将参数传递给箭头函数?
我想也许我应该提供一些关于我想要完成的事情的信息,也许如果以上是不可能的,有人有更好的主意.
基本上,我正在向BluebirdJS asCallback方法添加一个IIEF ,它将确定是否实际提供了回调,如果没有,则返回promise.
下面是ES5中的一个工作示例:
var _ = require('lodash')
var Promise = require('bluebird')
function testFunc( foo, callback ) {
return new Promise( function ( res, rej ){
res('You Said: ' + (_.isString( foo ) ? foo : 'NOTHING') )
})
.asCallback((function ( args ) {
return _.findLast(args, function(a) { …
Run Code Online (Sandbox Code Playgroud) 每当Mongoose模型在加载后尝试加载时,都会抛出错误,例如:
错误:uncaughtException:
Account
编译后无法覆盖模型.date = Fri Feb 26 2016 10:13:40 GMT-0700(MST),pid = 19231,uid = 502,gid = 20,cwd =/Users/me/PhpstormProjects/project,execPath =/usr/local/Cellar/node/0.12.4/bin/node,version = v5.2.0,argv = [/ usr/local/Cellar/node/0.12.4/bin/node,/ usr/local/Cellar/node0.12.4/bin/lab],rss = 73306112,heapTotal = 62168096,heapUsed = 29534752,loadavg = [1.6005859375,1.84716796875,1.8701171875],uptime = 648559 OverwriteModelError:Account
编译后无法覆盖模型.
我很好,但现在我正在为我的模型编写单元测试,我遇到了一个问题.
我将所有Mongoose模型放在文件src/models/
夹内的单独文件中,并且要加载这些模型,只需要文件夹,将Mongoose
对象传递给它,src/models/index.js
文件将加载所有模型,并返回一个对象楷模.这个index.js
文件可以在这里看到(而不是它的相关,但模型名称基本上是文件名,没有.js)
现在,模型的单元测试也分成单独的文件.每个模型都有一个测试文件.即使每个单元测试文件都关注特定模型,其中一些也使用其他模型(用于之前/之后的任务).
我刚刚创建了第二个单元测试文件,当我独立执行每个单元时,它们工作得很好.但是当我执行所有这些操作时,我收到上述错误,说明我试图多次加载模型.因为我需要./models
在每个单元测试用例中,所以我不止一次加载它们.
我想也许我可以after()
在每个单独的单元测试文件中清除所有加载的模型,如下所示:
after(function(done) {
mongoose.connection.close(function() {
mongoose.connection.models = {}
done()
})
})
Run Code Online (Sandbox Code Playgroud)
哪个根本不起作用(没有新的错误,但是一旦编译错误仍然存在,同样不能覆盖Account
模型 …
我正在尝试验证将要插入到新文档中的某些数据,但是在需要执行许多其他操作之前,这并不是必须的。因此,我将向静态方法添加一个函数,该函数有望针对模型模式验证数组中的对象。
到目前为止的代码如下:
module.exports = Mongoose => {
const Schema = Mongoose.Schema
const peopleSchema = new Schema({
name: {
type: Schema.Types.String,
required: true,
minlength: 3,
maxlength: 25
},
age: Schema.Types.Number
})
/**
* Validate the settings of an array of people
*
* @param {array} people Array of people (objects)
* @return {boolean}
*/
peopleSchema.statics.validatePeople = function( people ) {
return _.every(people, p => {
/**
* How can I validate the object `p` against the peopleSchema
*/
})
}
return …
Run Code Online (Sandbox Code Playgroud) 我正在学习BookshelfJS / KnexJS(从SequelizeJS切换),并且遇到了将数据导入通过KnexJS中的迁移功能创建的多个表中的问题。有4张桌子:
servers
operating_systems
applications
applications_servers
具有以下约束:
servers
。operating_system_id
参考operating_systems
。id
applications_servers
。server_id
参考servers
。id
applications_servers
。application_id
参考applications
。id
在运行时创建表就很好了knex migrate:latest --env development servers
,就是在将种子数据导入表中时出现错误。
最初,我将4个表的种子数据组织为目录中的4个不同文件./seeds/dev
,即${table_name}.js
:
有点调试后,我又意识到正在生成的错误时,文件中的种子数据applications_servers.js,因为当我拿一个出来,其他3跑就好了。然后,当我删除3个种子文件并将applications_servers.js移至./seeds/dev/目录并执行时knex seed:run
,applicationsservers表就可以很好地填充了。但是,当我尝试一次导入所有4个文件的种子数据时,收到以下错误:
# knex seed:run
Using environment: development
Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (`bookshelf_knex_lessons`.`applications_servers`, CONSTRAINT `applications_servers_server_id_foreign` …
Run Code Online (Sandbox Code Playgroud) 我正在工作中编写一个 Python 脚本,用于与 XLS/XLSX/CSV 电子表格进行交互。存在三个相互嵌套的主要类(不相互扩展,这些类实际上位于另一个类内部)
三个主要类解释如下:
Workbook
类,它是 XLS/XLSX/CSV 类的工厂方法。这是可以从外部访问的__Worksheet
类中的私有类Workbook
,用于打开文件本身中的特定电子表格或工作表。这只能通过Workbook.worksheet()
方法访问__Cell
类中的私有类__Worksheet
,与单元本身交互。这不应该从外部访问,而只能通过__Worksheet
类访问这是迄今为止类结构的简化版本:
class Workbook( object ):
def __init__( self, file_name ):
self.__file_name = file_name
def worksheet( self, name ):
return self.__Worksheet( self, name )
class __Worksheet():
def __init__( self, workbook, worksheet ):
self.__workbook = workbook
def cell( self, cell_id, data = None ):
return self.__Cell( cell_id, data )
class __Cell():
def __init__( self, cell, data = …
Run Code Online (Sandbox Code Playgroud) node.js ×6
javascript ×4
mongodb ×4
mongoose ×4
arguments ×1
bookshelf.js ×1
callback ×1
class ×1
ecmascript-6 ×1
knex.js ×1
lab ×1
mocking ×1
mysql ×1
oop ×1
python ×1
subclass ×1
unit-testing ×1
validation ×1