标签: mongoose

Mongoose查找/更新子文档

我有文档文件的以下模式:

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

var folderSchema = new Schema({
    name: { type: string },
    permissions: [ permissionSchema ]
});
Run Code Online (Sandbox Code Playgroud)

因此,对于每个页面,我可以拥有许多权限.在我的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);
    });
}
Run Code Online (Sandbox Code Playgroud)

但问题是烫发总是未定义的!我尝试以这种方式"静态地"获取权限:

var perm = data.permissions[0]; …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb node.js mongodb-query

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

mongoose架构创建

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

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

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

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});
Run Code Online (Sandbox Code Playgroud)

如果我有setter/validations/etc,答案会怎样改变?

mongoose mongodb node.js

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

nodejs mongodb对象id到字符串

IN nodejs,mongodb,mongoosejs as 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.
})
Run Code Online (Sandbox Code Playgroud)

为什么?那么如何让_id变为字符串呢?

mongoose mongodb node.js

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

如何获取mongoose.js中的最新和最旧记录(或者只是它们之间的时间跨度)

基本问题

我有一堆记录,我需要得到最新的(最近的)和最老的(最近的).

谷歌搜索我发现这个主题,我看到了几个问题:

// option 1
Tweet.findOne({}, [], { $orderby : { 'created_at' : -1 } }, function(err, post) {
  console.log( post );
});
// option 2
Tweet.find({}, [], {sort:[['arrival',-1]]}, function(err, post) {
  console.log( post );
});
Run Code Online (Sandbox Code Playgroud)

不幸的是他们都错了:

TypeError: Invalid select() argument. Must be a string or object.
Run Code Online (Sandbox Code Playgroud)

链接也有这个:

Tweet.find().sort('_id','descending').limit(15).find(function(err, post) {
  console.log( post );
});
Run Code Online (Sandbox Code Playgroud)

那一个错误:

TypeError: Invalid sort() argument. Must be a string or object.
Run Code Online (Sandbox Code Playgroud)

那么我该如何获得这些记录呢?

时间跨度

更理想的是,我只想要最旧和最新记录之间的时间差异(秒?),但我不知道如何开始这样的查询.

这是架构:

var Tweet = new Schema({
    body: String …
Run Code Online (Sandbox Code Playgroud)

javascript timespan mongoose node.js

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

MissingSchemaError:尚未为模型"用户"注册架构

在我的models/user.js档案中:

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

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

在我router/index.js,我有:

var mongoose = require('mongoose');
var User = mongoose.model('User');
Run Code Online (Sandbox Code Playgroud)

抛出错误:

MissingSchemaError: Schema hasn't been registered for model "User".
Run Code Online (Sandbox Code Playgroud)

但是,如果user.js,我(在最后一行)

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

index.js我这样做var User = require('../models/User');,然后一切正常.

但它不应该,因为config/pass.js我正在做,var User = mongoose.model('User');而且它的工作完美无瑕.

require('../models/User');语法不工作在Ubuntu,但在我的Mac.

我该怎么办?我如何解决它?我看了很多样本​​应用程序,包括MEAN,但没有什么是真正有用的.

javascript mongoose node.js express

42
推荐指数
7
解决办法
5万
查看次数

猫鼬中的 findByIdAndRemove 和 findByIdAndDelete 有什么区别?

此处的文档并没有对为什么有两种不同的操作来完成相同的事情提供太多解释,所以我想知道它们之间有什么区别。为什么我可以选择使用一种而不是另一种?

mongoose

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

.save()和使用update()之间的猫鼬差异

要修改mongoose中现有条目中的字段,使用之间有什么区别

model = new Model([...])
model.field = 'new value';
model.save();
Run Code Online (Sandbox Code Playgroud)

还有这个

Model.update({[...]}, {$set: {field: 'new value'});
Run Code Online (Sandbox Code Playgroud)

我问这个问题的原因是因为有人建议我昨天发布的一个问题:NodeJS和Mongo - 当多个用户同时发送请求时出现意外行为.这个人建议使用更新而不是保存,我还不完全确定它为什么会有所作为.

谢谢!

javascript mongoose mongodb node.js

41
推荐指数
4
解决办法
5万
查看次数

猫鼬:查找,修改,保存

我有一个Mongoose User模型:

var User = mongoose.model('Users',
    mongoose.Schema({
        username: 'string',
        password: 'string',
        rights: 'string'
    })
);
Run Code Online (Sandbox Code Playgroud)

我想找到一个User模型实例,修改它的属性,并保存更改.这是我试过的(这是错的!):

User.find({username: oldUsername}, function (err, user) {
    user.username = newUser.username;
    user.password = newUser.password;
    user.rights = newUser.rights;

    user.save(function (err) {
        if(err) {
            console.error('ERROR!');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

查找,修改和保存User模型实例的语法是什么?

javascript mongoose node.js

40
推荐指数
4
解决办法
9万
查看次数

MongooseError:查询已执行

.findOne()我将 Mongoose 更新到最新版本(6.0.1),现在每当执行时都会收到此错误:

MongooseError: Query was already executed: Streams.findOne({ i: 6 })
    at model.Query._wrappedThunk [as _findOne] (C:\Users\honza\ZiggerTestMaster\node_modules\mongoose\lib\helpers\query\wrapThunk.js:21:19)
    at C:\Users\honza\ZiggerTestMaster\node_modules\kareem\index.js:370:33
    at processTicksAndRejections (node:internal/process/task_queues:78:11)
    at runNextTicks (node:internal/process/task_queues:65:3)
    at listOnTimeout (node:internal/timers:526:9)
    at processTimers (node:internal/timers:500:7) {
  originalStack: 'Error\n' +
    '    at model.Query._wrappedThunk [as _findOne] (C:\\Users\\honza\\ZiggerTestMaster\\node_modules\\mongoose\\lib\\helpers\\query\\wrapThunk.js:25:28)\n' +
    '    at C:\\Users\\honza\\ZiggerTestMaster\\node_modules\\kareem\\index.js:370:33\n' +
    '    at processTicksAndRejections (node:internal/process/task_queues:78:11)\n' +
    '    at runNextTicks (node:internal/process/task_queues:65:3)\n' +
    '    at listOnTimeout (node:internal/timers:526:9)\n' +
    '    at processTimers (node:internal/timers:500:7)'
}
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

var visitorData = Visitor.find({});
    
app.get("/retrieve", function(req,res){
    visitorData.exec(function (err,data) {
        if (err) { …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js

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

Mongoose使用.select()方法

我对这种select方法的使用感到很困惑.这就是我使用它的方式,这是错误的:

Transaction.find({username : user.username}).select('uniqueId', 'confirmation_link', 'item_name', 'timeout', 'username', function(err, txs){
        callback(txs);
});
Run Code Online (Sandbox Code Playgroud)

我想要实现的只是从数据库中的事务中选择具有该用户名的事务,我想只取出select方法中列出的字段.任何人都可以指出我应该如何使用该select方法?谢谢.

javascript mongoose node.js

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