标签: mongoose-schema

防止猫鼬中的重复记录

我对 MongoDb / Mongoose 相当陌生,更习惯于 SQL Server 或 Oracle。

我有一个相当简单的事件架构。

EventSchema.add({
  pkey: { type: String, unique: true },
  device: { type: String, required: true },
  name: { type: String, required: true },
  owner: { type: String, required: true },
  description: { type: String, required: true },
});
Run Code Online (Sandbox Code Playgroud)

我正在查看Mongoose Indexes,它显示了两种方法,我使用了字段定义。

我还有一个非常简单的 API,它接受 POST 并在此集合上调用 create 以插入记录。

我编写了一个测试,检查是否不应该插入具有相同 pkey 的记录,以及 unique:true 是否正在运行。我已经有一组我读入数组的事件,所以我只是再次发布这些事件中的第一个,看看会发生什么,我预计 mongo DB 会抛出 E11000 重复键错误,但这并没有发生。

var url = 'api/events';
var evt = JSON.parse(JSON.stringify(events[0]));

// POST'ed new record won't …
Run Code Online (Sandbox Code Playgroud)

javascript mongoose mongodb mongoose-schema

11
推荐指数
2
解决办法
1万
查看次数

在猫鼬中,我如何要求字符串字段不为空或未定义(允许长度为 0 的字符串)?

我已经尝试过这个,它允许null,undefined和完全省略要保存的密钥:

{
  myField: {
    type: String,
    validate: value => typeof value === 'string',
  },
}
Run Code Online (Sandbox Code Playgroud)

这不允许''(空字符串)被保存:

{
  myField: {
    type: String,
    required: true,
  },
}
Run Code Online (Sandbox Code Playgroud)

如何在不禁止空字符串的情况下强制一个字段是 aString并且存在并且既不在 Mongoose 中null也不undefined在 Mongoose 中?

mongoose mongoose-schema

11
推荐指数
2
解决办法
7773
查看次数

如何在nodejs中创建mysql模式

我正在为我的数据库使用nodejs,表达框架和mysql.我想知道如何使用mysql复制这个mongoose代码.我找不到在nodejs文件中编写sql架构的方法.我必须使用工作台吗?谢谢!

var mongoose = require('mongoose');

var userSchema = mongoose.Schema({
    local: {
            username: String,
            password: String
         }
 });

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

mysql schema mysql-workbench mongoose-schema

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

mongoose中的虚拟对象,'this'是空对象

好吧,我是mongoose的新手,并试图了解如何使用虚拟属性.这是我一直在测试的示例代码.

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

var objSchema = new Schema({
  created: {type: Number, default: Date.now()},
});

objSchema.virtual('hour').get(()=>{
  //console.log(this);
  var d = new Date(this.created);
  return d.getHours();
});

var obj = mongoose.model('obj', objSchema);

var o = new obj();
o.toObject({virtuals: true});
console.log(o.created);
console.log(o.hour);
Run Code Online (Sandbox Code Playgroud)

所以我希望日志是这样的:

1457087841956
2
Run Code Online (Sandbox Code Playgroud)

但输出是

1457087841956
NaN
Run Code Online (Sandbox Code Playgroud)

当我在虚拟吸气剂的开头记录'this'时,它会打印{}.我究竟做错了什么?

mongoose mongodb node.js mongoose-schema

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

跳过时间戳中间件以获取Mongoose中的某些更新

我的应用程序使用Mongoose并具有使用timestamps选项的模式:

var fooSchema = new Schema({
    name: String,
}, {
    timestamps: true,
});
mongoose.model('Foo', fooSchema);
Run Code Online (Sandbox Code Playgroud)

因此,只要将更新写入集合,该updatedAt属性就会更改为当前日期.但是现在我想添加一些应该更新updatedAt属性的更改.Stackoverflow(示例)上的一些答案建议使用Foo.collection,因为据称访问本机MongoDB驱动程序.所以我尝试了这个:

Foo.collection.update({ _id: someFooId }, { $set: { name: 'New Name' } });
Run Code Online (Sandbox Code Playgroud)

然而,这也改变了updatedAt财产.

那么如何在更改的情况下更新文档updatedAt

mongoose mongodb node.js mongoose-schema

10
推荐指数
2
解决办法
1248
查看次数

如何在mogoose中嵌套填充中选择特定字段

这是我的架构:

var UserSchema = new Schema({
    email: String,
    name: String,
    city: String,
    username: String,
    profilePic: String,
    phoneNo: Number,
    shortList: {
        project: [{ type: Schema.ObjectId, ref: "Project" }],
        flat: [{ type: Schema.ObjectId, ref: "Flat" }],
    },

});

var FlatSchema = new Schema({
    project: { type: Schema.ObjectId, ref: "Project" },
    status: String,
    floor: Number,
    size: String,
    type: String,
    flat_number: String,
    price: Number,
    flooringType: String,
    createdAt: { type: Date, 'default': Date.now },
    isDeleted: { type: Boolean, 'default': false },
   });

var ProjectSchema = …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb mongoose-populate mongoose-schema

9
推荐指数
2
解决办法
1万
查看次数

MongoDB/Mongoose时间戳没有更新

架构:

var schema = new Schema({...}, {
    timestamps: true,
    id: false,
    toJSON: {
        virtuals: true,
    },
    toObject: {
        virtual: true,
    }
});
schema.virtual('updated').get(function () {
    if(typeof this.updatedAt === "undefined" && typeof this.createdAt === "undefined") return "";
    var updated = (typeof this.updatedAt === "undefined") ? this.createdAt : this.updatedAt;
    return "Updated "+moment(updated).fromNow();
});
Run Code Online (Sandbox Code Playgroud)

此代码最近正在运行 - 对于特定实例,updatedAt将在8月24日出现,但对文档的任何新编辑都不会更新时间戳.

感觉我在这里错过了一些非常愚蠢的东西.

mongodb node.js mongoose-schema

9
推荐指数
2
解决办法
5350
查看次数

如何在Mongoose中执行查找查询?

我有mongodb中的Ebooks数据集合

{ 
    "_id" : ObjectId("58b56fe19585b10cd42981d8"), 
    "cover_path" : "D:\\Ebooks\\uploads\\ebooks\\cover\\1488285665748-img1-700x400.jpg", 
    "path" : "D:\\Ebooks\\uploads\\ebooks\\pdf\\1488285665257-Webservices Natraz.pdf", 
    "description" : "ebook", 
    "title" : "book name", 
    "tag" : [
        "Hindi", 
        "Other"
    ], 
    "__v" : NumberInt(0)
}
Run Code Online (Sandbox Code Playgroud)

现在我想搜索一些东西,如果关键字是一点点匹配,"title:"然后显示所有相关的书籍对象.

我的Mongoose架构是: -

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

var EbookSchema   = new Schema({
    title: {type:String},
    description: {type:String},
    path: {type:String,required:true},
    cover_path: {type:String,required:true},
    tag: [{ type: String }]

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

我试试: -

app.get('/ebook?search=',function(req,res){
var search_key = req.param('search');
    Ebook.find(title:'search',function(err, ebooks) {
            if (err)
                res.send(err);

            res.json(ebooks);
        }); …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js express mongoose-schema

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

如何获得可用的Mongoose Discriminators列表?

在某种情况下,您有一个用于创建名为User的基本模型的用户方案.然后对于用户角色,使用mongoose discriminators创建名为Admin,Employee和Client的继承模型.有没有办法以编程方式确定可用的用户模型有多少歧视/继承/角色,以及可用的名称?

我在代码方面的问题:

文件:models/user.js

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

var options = {discriminatorKey: 'role'};

var userSchema = mongoose.Schema({
  name: String,
  email: String,
  password: String,
},options);

var User = mongoose.model('User', userSchema);

var Client = User.discriminator("Client", mongoose.Schema({
  Address : String,
  Tax_identification : String,
  Phone_number : String,
  Internal_Remarks : String,
  CRM_status : String,
  Recent_contact : String,
}));
var Employee = User.discriminator("Employee",mongoose.Schema({
  Staff_Id: String,
}));

module.exports = {User: User, Client: Client, Employee: Employee };
Run Code Online (Sandbox Code Playgroud)

文件:controllers/usersController.js

var User = require('../models/user.js').User; …
Run Code Online (Sandbox Code Playgroud)

mongoose node.js express discriminator mongoose-schema

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

如何通过猫鼬中的嵌套属性查找

我试图通过嵌套属性在我的数据库中找到一个对象,我似乎找不到任何方法来做到这一点。我的架构如下,我已经展示了我如何尝试查询。

var stations = {
    Alpha: Number,
    Beta: Number
};
var systemSchema = new mongoose.Schema({
    name: String,
    location: String,
    nodes: {
        main: stations,
        secondary: stations,
        tertiary: stations
    }
});

var System = mongoose.model("System", systemSchema);

System.findOne({ nodes: { main: {Alpha: 23000}}}, function(err, system){
    if(err){console.log(err);}
    else{console.log(system);}
});
Run Code Online (Sandbox Code Playgroud)

每次我运行它时,都不会返回任何内容。我原以为我的数据库中会返回相应的对象。

javascript mongoose mongoose-schema

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