javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

node.js-MongoError:尝试删除集合时找不到ns

当我尝试删除集合时,猫鼬抛出错误,即“ MongoError:ns not found”。

这是我的猫鼬代码:

var mongoose = require('bluebird').promisifyAll(require('mongoose'));
......
......
......   
mongoose.connection.db.dropCollection("myCollection",function(err,affect){
   console.log('err',err);

})

错误:

错误{[MongoError:未找到ns]
名称:“ MongoError”,
讯息:'ns 未找到',
好的:0,
errmsg:“未找到ns”}

trans by 2020-08-10T08:15:26Z

javascript-MissingSchemaError:尚未为模型“ User”注册架构

在我的require('../models/User');文件中:

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

var userSchema = new Schema({
    (define schema)
});
...
(save user)
...
(check password)
...
mongoose.model('User', userSchema);

在我的require('../models/User');中,我有:

var mongoose = require('mongoose');
var User = mongoose.model('User');

引发错误:

MissingSchemaError: Schema hasn't been registered for model "User".

但是,如果在require('../models/User');中,我做了(在最后一行中)

module.exports = mongoose.model('User', userSchema);

然后在require('../models/User');中执行var User = mongoose.model('User');,则一切正常。

但这不应该,因为在require('../models/User');中,我正在执行var User = mongoose.model('User');,它可以完美地工作。

require('../models/User');语法在Ubuntu上不起作用,但在我的Mac上可用。

我该怎么办? 我如何解决它? 我查看了无数示例应用程序,包括MEAN,但没有任何真正的帮助。

trans by 2020-08-09T07:18:22Z

JavaScript-猫鼬查找/更新子文档

我的文件夹文件夹有以下架构:

var permissionSchema = new Schema({
    role: { type: String },
    create_folders: { type: Boolean },
    create_contents: { type: Boolean }
});

var folderSchema = new Schema({
    name: { type: string },
    permissions: [ permissionSchema ]
});

因此,对于每个页面,我可以拥有许多权限。 在CMS中,有一个面板,其中列出了所有文件夹及其权限。 管理员可以编辑一个权限并保存。

我可以很容易地用其权限数组保存整个Folder文档,其中只修改了一个权限。 但是我不想保存所有文档(实际架构中包含更多字段),所以我这样做了:

savePermission: function (folderId, permission, callback) {
    Folder.findOne({ _id: folderId }, function (err, data) {
        var perm = _.findWhere(data.permissions, { _id: permission._id });                

        _.extend(perm, permission);

        data.markModified("permissions");
        data.save(callback);
    });
}

但是问题是烫发总是不确定的! 我试图以这种方式“静态地”获取许可:

var perm = data.permissions[0];

而且效果很好,所以问题在于Underscore库无法查询权限数组。 因此,我想有一种更好的方法(和工作方式)来获取所提取文档的子文档。

任何想法?

附注:我解决了使用“ for”循环检查data.permission数组中的每个项目并检查data.permissions [i] ._ id == Permission._id的问题,但是我想要一个更聪明的解决方案,我知道有一个解决方案!

trans by 2020-08-06T04:57:18Z

Mongoose.js:删除集合或数据库

是否可以使用mongoose.js删除集合或整个数据库?

trans by 2020-08-03T07:23:40Z

node.js-猫鼬模式创建

我刚开始是猫鼬。 我有一个带有猫鼬的创建脚本,该脚本使用示例数据创建模式和数据库。

现在,我编写实际的应用程序。 每次我的应用程序运行时,我是否需要创建模式对象,或者它已经以某种方式可用?

换句话说,我是否需要在每个使用猫鼬访问数据库的应用程序中运行此代码,还是仅在第一次运行此代码:

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

如果我有setters / validations / etc,答案将如何变化?

trans by 2020-07-30T21:17:36Z

node.js-如何使用猫鼬Promise-旺

有人可以给我一个关于如何将Promise与猫鼬一起使用的示例。 这是我所拥有的,但无法正常工作:

app.use(function (req, res, next) {
  res.local('myStuff', myLib.process(req.path, something));
  console.log(res.local('myStuff'));
  next();
});

然后在myLib中,我将得到以下内容:

exports.process = function ( r, callback ) {
  var promise = new mongoose.Promise;
  if(callback) promise.addBack(callback);

  Content.find( {route : r }, function (err, docs) {
     promise.resolve.bind(promise)(err, docs);

  });

  return promise;

};

在某个时候,我希望我的数据能够存在,但是我该如何访问或获取它呢?

trans by 2020-07-26T14:58:35Z

node.js-nodejs mongodb对象ID转换为字符串

在nodejs中,使用mongodb,mongoosejs作为orm

我正在做这个

我有一个模型,用户

User.findOne({username:'someusername'}).exec(function(err,user){
console.log(user) //this gives full object with something like {_id:234234dfdfg,username:'someusername'}
//but

console.log(user._id) //give undefined.
})

为什么? 以及如何将_id字符串化呢?

trans by 2020-07-22T07:00:55Z

node.js-猫鼬在没有_id字段的情况下检索数据

我想从我的Node.js应用程序中的Mongoose设置中检索一些数据。 我注意到,无论我写什么作为字段选择,我总会得到2974859255285284761600字段。 有没有一种方法不可以获取它?我现在是这样的:

Transaction.find({username : user.username}, ['uniqueId', 'timeout', 'confirmation_link', 'item_name'], function(err, txs){
        console.log("user : " + user.username + " with txs: " + txs);
        callback(txs);
});

并向我记录包含_id字段的结果。

trans by 2020-07-20T13:52:18Z

node.js-如何在同一条语句中使用填充和聚合?

这是我的约会集合:

{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }

{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }

{ _id: ObjectId("518ee0bc9be1909012000002"), date: ISODate("2013-05-13T22:00:00Z"), patient:ObjectId("518ee0bc9be1909012000002") }

我用聚合得到以下结果

{date: ISODate("2013-05-13T22:00:00Z"),
patients:[ObjectId("518ee0bc9be1909012000002"),ObjectId("518ee0bc9be1909012000002"),ObjectId("518ee0bc9be1909012000002")] }

像这样:

Appointments.aggregate([
{$group: {_id: '$date', patients: {$push: '$patient'}}},
{$project: {date: '$_id', patients: 1, _id: 0}}
], ...)

如何填充患者文档我尝试了此方法,但是它不起作用... Appointments.find({}).populate("patient").aggregate...。

换句话说,我可以在同一条语句中使用填充和聚合吗

任何帮助请

trans by 2020-07-20T05:07:28Z

mongodb-全文搜索,以猫鼬为重

我发现,从3.8.9版开始,猫鼬支持全文搜索。 但是我找不到适合的文档!
我想做类似的事情:

db.collection.ensureIndex(
    // Fields to index
    {
        animal:  "text",
        color:   "text",
        pattern: "text",
        size:    "text"
    },

    // Options
    {
        name: "best_match_index",

        // Adjust field weights (default is 1)
        weights: {
            animal: 5,  // Most relevant search field
            size:   4   // Also relevant
       }
    }
)

我可以用纯猫鼬做吗? 还是我必须使用诸如mongoose-text-search之类的插件? 没有体重呢?
我该怎么办呢?

trans by 2020-07-12T21:35:46Z

Javascript-猫鼬中的id和_id有什么区别?

猫鼬_idid有什么区别? 参考哪个更好?

trans by 2020-07-08T09:15:26Z

node.js-使用Mongoose进行多对多映射

我的设计中有FlashcardSchemas和PackageSchemas。 一个抽认卡可以属于不同的软件包,而一个软件包可以包含不同的抽认卡。

在下面,您可以看到我的猫鼬模式定义的精简版本:

// package-schema.js
var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var PackageSchema = new Schema({
    id          : ObjectId,
    title       : { type: String, required: true },
    flashcards  : [ FlashcardSchema ]
});

var exports = module.exports = mongoose.model('Package', PackageSchema);

// flashcard-schema.js
var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

var FlashcardSchema = new Schema({
    id      : ObjectId,
    type        : { type: String, default: '' },
    story       : { type: String, default: '' },
    packages    : [ PackageSchema ]
});

var exports = module.exports = mongoose.model('Flashcard', FlashcardSchema);

从上面的注释中可以看到,这两个架构定义属于单独的文件,并且相互引用。

我得到一个异常,指出未按预期定义PackageSchema。 我如何映射与猫鼬的多对多关系?

trans by 2020-07-07T19:04:41Z

node.js-猫鼬填充与对象嵌套

使用猫鼬填充和直接对象包含之间是否有性能差异(查询的处理时间)? 什么时候应该使用?

猫鼬人口的例子:

var personSchema = Schema({
  _id     : Number,
  name    : String,
  stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

var storySchema = Schema({
  _creator : { type: Number, ref: 'Person' },
  title    : String,
});

猫鼬对象嵌套示例:

var personSchema = Schema({
  _id     : Number,
  name    : String,
  stories : [storySchema]
});

var storySchema = Schema({
  _creator : personSchema,
  title    : String,
});
trans by 2020-07-01T13:55:15Z

node.js-处理猫鼬验证错误–在哪里以及如何进行?

我试图决定如何处理猫鼬中的验证错误。

使用节点验证器的自定义错误消息

我已经使用node-validator定义了自己的验证规则,例如:

UserSchema.path('username')
  .validate(function (username) {
    return validator.check(username).notEmpty()
  }, 'Username cannot be blank')

这将产生如下所示的错误:

  username: 
   { message: 'Validator "Username cannot be blank" failed for path username',
     name: 'ValidatorError',
     path: 'username',
     type: 'Username cannot be blank' },

使用猫鼬验证器

但是,node-validator提供了自己的错误消息。 如果我使用mongoose-validator节点模块将node-validator直接插入到我的架构中,那么我可以直接使用以下错误消息:

var UserSchema = new Schema({
  name: { type: String, validate: [validate('notEmpty')] }
});

这将生成如下错误消息:

  name: 
   { message: 'Validator "String is empty" failed for path name',
     name: 'ValidatorError',
     path: 'name',
     type: 'String is empty' } }

我也可以在此处提供自定义错误消息:

var UserSchema = new Schema({
  name: { type: String, validate: [validate({message: 'Name cannot be blank' }, 'notEmpty')] }
});

猫鼬required国旗

猫鼬允许您根据需要定义一个字段:

var UserSchema = new Schema({
  name: { type: String, required: true }
});

这将生成如下错误消息:

  name: 
   { message: 'Validator "required" failed for path name',
     name: 'ValidatorError',
     path: 'name',
     type: 'required' } }

问题

这些验证器似乎希望您使用其内置的错误消息。 例如,我想将字段声明为required,如上所示,但是找不到自定义错误消息的方法。 mongoose-validator模块直到最近才支持自定义消息,这使我认为它们在模型级别是一种反模式。

实施这些验证器的最佳方法是什么? 我应该让他们产生自己的错误,然后以某种方式解释它们吗?

trans by 2020-06-30T17:07:57Z

为什么猫鼬不更新验证?

我有这个代码

var ClientSchema = new Schema({
  name: {type: String, required: true, trim: true}
});

var Client = mongoose.mode('Client', ClientSchema);

使用express,我用此代码创建一个新客户端

var client = new Client(req.body);
client.save(function(err, data) {
  ....
});

如果我在表单上将名称字段留空,则mongoose不允许创建客户端,因为我在架构上根据需要设置了该客户端。 另外,如果我在名称前后保留空格,猫鼬会在保存之前删除该空格。

现在,我尝试使用此代码更新客户端

var id = req.params.id;
var client = req.body;
Client.update({_id: id}, client, function(err) {
  ....
});

它允许我更改名称,但是如果我在表单上将其保留为空白,猫鼬将不会验证并保存一个空名称。 如果我在名称前后添加空格,则会使用空格保存名称。

为什么猫鼬在保存时验证而不在更新时验证? 我做错了吗?

mongodb的:2.4.0猫鼬:3.6.0快递:3.1.0节点:0.10.1

trans by 2020-06-27T21:21:49Z

node.js-Mocha beforeEach与执行之前

我最近遇到了一个我无法解释的问题。 我在这些测试中有很多代码,所以我将尽力在这里捕获想法

我有类似的测试:

describe('main page', function(){
  beforeEach(function(done){
    addUserToMongoDb(done);   // #1
  });

  afterEach(function(done){
    removeUserFromMongoDb(done);
  });

  context('login', function(){
     it('should log the user in, function(){
       logUserIn(user_email);  // #2 - This line requires the user from the beforeEach
     });
  });

  context('preferences', function(){
    before(function(done){    //#3
       logUserInBeforeTest(user_email);
     });

    it('should show the preferences', function(){
       doCheckPreferences(); // #4
    });
  });
});

问题是,beforeEach by before运行良好。 我可以看到它在数据库上发生,并且在beforeEach中的测试通过了。

但是,在偏好设置上下文中的测试在before失败,因为它找不到用户在beforeEach进行登录。

似乎上下文before在描述beforeEach之前执行,这导致它们失败。 如果我将logUserIn移到it块中,则可以正常工作。

是什么原因造成的?

trans by 2020-06-16T20:51:36Z

如何使用Node.js在MongoDB中使用cursor.forEach()?

我的数据库中有大量的文档,我想知道如何浏览所有文档并更新它们,每个文档具有不同的值。

trans by 2020-02-17T22:49:16Z

javascript-猫鼬-创建文档(如果不存在),否则,更新-在两个cas中返回文档

我正在寻找一种将代码的一部分重构为更短,更简单的方法,但是我对Mongoose不太了解,我不确定该如何进行。

我正在尝试检查集合是否存在文档,如果不存在,则创建它。 如果确实存在,我需要对其进行更新。 无论哪种情况,我都需要随后访问文档的内容。

到目前为止,我设法做到的是查询集合中的特定文档,如果找不到,则创建一个新文档。 如果找到它,我将对其进行更新(当前使用日期作为虚拟数据)。 从那里,我可以从最初的findOneAndUpdate操作中找到找到的文档,也可以访问新保存的文档,并且可以正常工作,但是必须有一种更好的方法来完成我要执行的操作。

这是我的工作代码,没有其他功能。

var query = Model.find({
    /* query */
}).lean().limit(1);

// Find the document
query.exec(function(error, result) {
    if (error) { throw error; }
    // If the document doesn't exist
    if (!result.length) {
        // Create a new one
        var model = new Model(); //use the defaults in the schema
        model.save(function(error) {
            if (error) { throw error; }
            // do something with the document here
        });
    }
    // If the document does exist
    else {
        // Update it
        var query = { /* query */ },
            update = {},
            options = {};

        Model.update(query, update, options, function(error) {
            if (error) { throw error; }
            // do the same something with the document here
            // in this case, using result[0] from the topmost query
        });
    }
});

我已经研究了findOneAndUpdate和其他相关方法,但不确定它们是否适合我的用例或我是否知道如何正确使用它们。 谁能指出我正确的方向?

(大概)相关问题:

  • 如何在更新期间检查数据库中是否已存在数据(Mongoose And Express)
  • Mongoose.js:如何实现创建或更新?
  • NodeJS + Mongo:如果不存在则插入,否则-更新
  • 用猫鼬返回更新的集合

编辑

在搜索过程中,我没有遇到指向我的问题,但是在查看了答案之后,我想到了这个问题。 在我看来,它当然更漂亮,并且可以工作,因此,除非我做的事情很糟糕,否则我想我的问题可能会结束。

我很乐意在解决方案上提供任何其他意见。

// Setup stuff
var query = { /* query */ },
    update = { expire: new Date() },
    options = { upsert: true };

// Find the document
Model.findOneAndUpdate(query, update, options, function(error, result) {
    if (!error) {
        // If the document doesn't exist
        if (!result) {
            // Create it
            result = new Model();
        }
        // Save the document
        result.save(function(error) {
            if (!error) {
                // Do something with the document
            } else {
                throw error;
            }
        });
    }
});
trans by 2020-02-16T13:43:34Z

node.js-为什么我们需要使用猫鼬的优势

我刚开始使用mongodb,最近浏览了ODM框架Mongoose

在文档上,我找不到为什么需要使用Mongoose。我可以给出的原因之一是可以从Mongoose定义应用程序架构。

我正在寻找更多可能的原因,以及吸引我使用Mongoose的需求。

请列出所有可能的优点和原因/需要使用Mongoose的原因。

trans by 2020-02-16T08:58:31Z

node.js-确定预保存callb中的记录是否为“新”

有没有办法找出猫鼬模型架构的pre save回调中的记录“是否是新的”(尚未保存)?

trans by 2020-02-15T18:15:09Z

1 2 3 4 5 6 下一页 共6页