我对 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) 我已经尝试过这个,它允许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 中?
我正在为我的数据库使用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) 好吧,我是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并具有使用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?
这是我的架构:
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) 架构:
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中的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) 在某种情况下,您有一个用于创建名为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) 我试图通过嵌套属性在我的数据库中找到一个对象,我似乎找不到任何方法来做到这一点。我的架构如下,我已经展示了我如何尝试查询。
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)
每次我运行它时,都不会返回任何内容。我原以为我的数据库中会返回相应的对象。
mongoose-schema ×10
mongoose ×8
mongodb ×6
node.js ×5
express ×2
javascript ×2
mysql ×1
schema ×1