我试图找出ORM和ODM之间的区别,据我所知,ORM(对象关系映射器)映射数据之间的关系,其中ODM(对象文档映射器)处理文档.我是否正确假设mySQL是ORM的一个例子而MongoDB是ODM的一个例子?
我相信你可以看到,我对这个概念的理论并不太熟悉.有人可以澄清两者之间的差异吗?
是否可以查询特定日期?
我在mongo Cookbook中发现我们可以在一个范围内查询日期范围 ,如下所示:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Run Code Online (Sandbox Code Playgroud)
但具体日期是否可能?这不起作用:
db.posts.find({"created_on": new Date(2012, 7, 14) })
Run Code Online (Sandbox Code Playgroud) 我已经尝试了MongoMapper,它功能齐全(提供几乎所有AR功能),但我对使用大型数据集时的性能不是很满意.有没有人比较Mongoid?任何性能提升?
如何查询其中有苹果的冰沙?(下面是一个包含3个文件的集合)
_id => 1
name => 'best smoothie'
ingredients => Array
(
[0] => apple
[1] => raspberry
[2] => orange
[3] => banana
)
_id => 2
name => 'summer smoothie'
ingredients => Array
(
[0] => lemon
[1] => mint
)
_id => 3
name => 'yogurt smoothie'
ingredients => Array
(
[0] => apple
[1] => blueberry
)
Run Code Online (Sandbox Code Playgroud) 我想为我的用户文档创建一个带有Mongoose的模型层,它可以:
在持久化到db之前,需要执行所有这些操作.幸运的是,mongoose支持验证,插件和中间件.
不好的是我找不到关于这个问题的任何好材料.mongoosejs.com上的官方文档太短了......
有没有人有一个关于Mongoose预处理的例子(或一个完整的插件,如果它存在的话)?
问候
我对mongoosejs中模型的使用感到困惑
可以使用mongoose以这些方式创建模型
使用Mongoose
var mongoose = require('mongoose');
var Actor = mongoose.model('Actor', new Schema({ name: String }));
Run Code Online (Sandbox Code Playgroud)
使用连接
var mongoose = require('mongoose');
var db = mongoose.createConnection(..);
db.model('Venue', new Schema(..));
var Ticket = db.model('Ticket', new Schema(..));
var Venue = db.model('Venue');
Run Code Online (Sandbox Code Playgroud)
使用现有的Model实例
var doc = new Tank;
doc.model('User').findById(id, callback);
Run Code Online (Sandbox Code Playgroud)
现在返回的模型之间有什么区别Mongoose.model
,Connection.model
和Model.model
.何时使用什么,创建/获取模型的推荐方法是什么?
我想在node.js中使用ODM进行redis.有没有人有使用任何经验?理想情况下,我想要的东西有点相当于猫鼬(除了Redis而不是Mongodb).
到目前为止我听到的两个是nohm和ron.有人可以比较使用其中任何一种的经验吗?我也读过关于redback的内容,我很好奇它是否适用于ODM.
我想在Doctrine Mongo ODM中编写一个查询,在两个或多个字段中通过regex进行搜索.在SQL中它看起来像:
SELECT * FROM user WHERE name LIKE %search% OR surname LIKE %search%;
Run Code Online (Sandbox Code Playgroud)
我可以像这样写一个字段的查询:
$qb->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'));
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在更多领域进行搜索时,我感到很茫然.
谢谢你的帮助
我需要实现小型ODM功能.我从数据库中获得了简单的javascript对象,我需要将其转换为我的模型类实例.让我们假设模型看起来像:
class Model{
constructor(){
this.a = '777';
---- whole bunch of other things ---
}
print(){
console.log(this.a);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我需要转换var a = {b:999, c:666}
为模型的实例并且能够在a.print()
之后调用,并且在a.print()
执行时777
应该放在控制台中.怎么做?
我在MongoDB中存储的一些数据遇到了一些问题(注意:我使用的是mongoose作为ODM).我有两个模式:
mongoose.model('Buyer',{
credit: Number,
})
Run Code Online (Sandbox Code Playgroud)
和
mongoose.model('Item',{
bid: Number,
location: { type: [Number], index: '2d' }
})
Run Code Online (Sandbox Code Playgroud)
买方/物品将具有父母/子女协会,具有一对多的关系.我知道我可以将Items作为嵌入的subdocs设置到Buyer文档,或者我可以创建两个单独的文档,其中对象id引用彼此.
我现在面临的问题是,我需要查询的项目它的出价比买方的信用较低,而且这里位置附近一定地理坐标.
为了满足第一个标准,似乎我应该将Items作为一个子目录嵌入,以便我可以比较这两个数字.但是,为了将位置与geoNear查询进行比较,似乎最好将文档分开,否则,我无法在每个子文档上执行geoNear.
有什么方法可以对这些数据执行这两项任务吗?如果是这样,我应该如何构建我的数据?如果没有,有没有办法可以执行一个查询,然后对第一个查询的结果进行第二次查询?
谢谢你的帮助!
odm ×10
mongodb ×6
mongoose ×5
node.js ×5
express ×2
javascript ×2
database ×1
doctrine-odm ×1
ecmascript-6 ×1
mongoid ×1
mongomapper ×1
ohm ×1
orm ×1
php ×1
querying ×1
redis ×1
ruby ×1