在早期版本的Mongoose(对于node.js)中,有一个选项可以在不定义模式的情况下使用它
var collection = mongoose.noSchema(db, "User");
Run Code Online (Sandbox Code Playgroud)
但在当前版本中,"noSchema"功能已被删除.我的模式可能经常更改,并且实际上不适合定义的模式,所以有没有一种在mongoose中使用无模式模型的新方法?
我刚到Node.js看到有很多lib用于MongoDB,最流行的似乎是这两个:( mongoose和mongodb).我可以获得这些扩展的优缺点吗?这两个有更好的替代品吗?
编辑:找到一个看起来也很有趣的节点-mongolian的新库,并且"Mongolian DeadBeef是一个非常棒的Mongo DB node.js驱动程序,它试图接近mongodb shell." (readme.md)
https://github.com/marcello3d/node-mongolian
这只是为了查看这个的新人增加了更多的资源,所以基本上蒙古语就像ODM一样......
我习惯于Java中的经典OOP.
使用NodeJS在JavaScript中进行OOP的最佳实践是什么?
每个Class都是一个文件module.export?
如何创建类?
this.Class = function() {
//constructor?
var privateField = ""
this.publicField = ""
var privateMethod = function() {}
this.publicMethod = function() {}
}
Run Code Online (Sandbox Code Playgroud)
vs.(我甚至不确定它是否正确)
this.Class = {
privateField: ""
, privateMethod: function() {}
, return {
publicField: ""
publicMethod: function() {}
}
}
Run Code Online (Sandbox Code Playgroud)
与
this.Class = function() {}
this.Class.prototype.method = function(){}
...
Run Code Online (Sandbox Code Playgroud)
继承如何工作?
是否有在NodeJS中实现OOP的特定模块?
我发现了一千种不同的方法来创造类似于OOP的东西..但我不知道最常用/实用/干净的方式是什么.
奖金问题:与MongooseJS一起使用的建议"OOP风格"是什么?(可以将MongooseJS文档视为类和用作实例的模型吗?)
编辑
这里是JsFiddle中的一个例子,请提供反馈.
//http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/
function inheritPrototype(childObject, parentObject) {
var copyOfParent = Object.create(parentObject.prototype)
copyOfParent.constructor = childObject
childObject.prototype = …Run Code Online (Sandbox Code Playgroud) 我目前在为下面的文档创建架构时遇到问题.来自服务器的响应始终将"trk"字段值返回为[Object].不知怎的,我不知道这应该如何运作,因为我至少尝试过对我有意义的所有方法;-)
如果这有帮助,我的Mongoose版本是3.6.20和MongoDB 2.4.7在我忘记之前,将它设置为Index(2d)会很不错
原始数据:
{
"_id": ObjectId("51ec4ac3eb7f7c701b000000"),
"gpx": {
"metadata": {
"desc": "Nürburgring VLN-Variante",
"country": "de",
"isActive": true
},
"trk": [
{
"lat": 50.3299594,
"lng": 6.9393006
},
{
"lat": 50.3295046,
"lng": 6.9390688
},
{
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}]
}
}
Run Code Online (Sandbox Code Playgroud)
猫鼬模式:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
Run Code Online (Sandbox Code Playgroud)
Chrome中"网络"标签的响应总是如此(这只是错误的trk部分):
{ trk:
[ [Object],
[Object], …Run Code Online (Sandbox Code Playgroud) 例如,此代码会生成一个名为"datas"的集合
var Dataset = mongoose.model('data', dataSchema);
Run Code Online (Sandbox Code Playgroud)
此代码导致创建一个名为"users"的集合
var User = mongoose.model('user', dataSchema);
Run Code Online (Sandbox Code Playgroud)
谢谢
随着事情多年来的变化,请考虑更新的答案,这些答案包含更多最新信息!
由于许多新的Node.js库很快就被淘汰了,而且我想要询问有关使用以下内容上传图像的例子相对较少:
别人怎么做的?
我发现:node-formidable,但我不熟悉上传图片,所以我想学习一般的东西以及使用Node.js和Express这样做的方法.
当发送请求/customers/41224d776a326fb40f000001和文件_id 41224d776a326fb40f000001不存在时,doc是null,我正在返回404:
Controller.prototype.show = function(id, res) {
this.model.findById(id, function(err, doc) {
if (err) {
throw err;
}
if (!doc) {
res.send(404);
}
return res.send(doc);
});
};
Run Code Online (Sandbox Code Playgroud)
但是,如果_id不匹配Mongoose所期望的"格式"(我想),例如GET /customers/foo返回一个奇怪的错误:
CastError:对于路径"_id"处的值"foo",转换为ObjectId失败.
那么这个错误是什么?
myModel.find({}, function(err, items){
console.log(items.length); // big number
});
Run Code Online (Sandbox Code Playgroud)
如何将返回的项目限制为仅插入的最新10项?
如何在示例文档中填充"组件":
{
"__v": 1,
"_id": "5252875356f64d6d28000001",
"pages": [
{
"__v": 1,
"_id": "5252875a56f64d6d28000002",
"page": {
"components": [
"525287a01877a68528000001"
]
}
}
],
"author": "Book Author",
"title": "Book Title"
}
Run Code Online (Sandbox Code Playgroud)
这是我的JS,我通过Mongoose获取文档:
Project.findById(id).populate('pages').exec(function(err, project) {
res.json(project);
});
Run Code Online (Sandbox Code Playgroud) 如果我有两个模式,如:
var userSchema = new Schema({
twittername: String,
twitterID: Number,
displayName: String,
profilePic: String,
});
var User = mongoose.model('User')
var postSchema = new Schema({
name: String,
postedBy: User, //User Model Type
dateCreated: Date,
comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});
Run Code Online (Sandbox Code Playgroud)
我尝试将它们连接在一起,就像上面的例子,但我无法弄清楚如何做到这一点.最终,如果我可以做这样的事情,那将使我的生活变得非常轻松
var profilePic = Post.postedBy.profilePic
Run Code Online (Sandbox Code Playgroud) mongoose ×10
mongodb ×7
node.js ×7
javascript ×3
express ×1
file-upload ×1
geo ×1
image ×1
inheritance ×1
oop ×1
schema ×1