当我阅读文档时,我发现了以下注释:
当$ sort紧接在管道中的$ limit之前时,$ sort操作仅保持前n个结果,其中n是指定的限制,而MongoDB只需要在内存中存储n个项目.当allowDiskUse为true且n个项超过聚合内存限制时,此优化仍适用.
如果我对此是正确的,它仅适用于我同时使用$ sort和$ limit的情况
db.coll.aggregate([
...,
{$sort: ...},
{$limit: limit},
...
]);
Run Code Online (Sandbox Code Playgroud)
但是,我想我们大部分时间都会这样做
db.coll.aggregate([
...,
{$sort: ...},
{$skip: skip},
{$limit: limit},
...
]);
Run Code Online (Sandbox Code Playgroud)
问题1:如果我在这里使用$ skip,是否意味着上述规则不适用?
我问这个问题,因为理论上MongoDB仍然可以计算前n个记录,并通过只排序前n个记录来提高性能.我没有找到任何关于此的文件.如果规则不适用,
问题2:我是否需要将查询更改为以下内容以提高性能?
db.coll.aggregate([
...,
{$sort: ...},
{$limit: skip + limit},
{$skip: skip},
{$limit: limit},
...
]);
Run Code Online (Sandbox Code Playgroud)
编辑:我认为解释我的用例会使上面的问题更有意义.我正在使用MongoDB 2.6提供的文本搜索功能来查找产品.我担心如果用户输入一个非常常见的关键词,如"红色",将返回太多结果.因此,我正在寻找更好的方法来生成这个结果.
EDIT2:事实证明上面的最后一个代码等于
db.coll.aggregate([
...,
{$sort: ...},
{$limit: skip + limit},
{$skip: skip},
...
]);
Run Code Online (Sandbox Code Playgroud)
因此,我总是可以使用此表单来应用前n个规则.
在一个新项目中,我需要努力使用lucene来实现搜索器.这个搜索者将是该项目的一个非常重要(和大)的部分.用MongoDb替换Relational Database + Lucene是有效还是方便?
编辑:好的,我会澄清:我不是在询问风险,我可以在这个项目中支付这个价格.我的观点是:MongoDB是否面向这种事情?我可以制作一个完整的搜索引擎,具有与Lucene相同的性能吗?一位朋友指出MongoDB是另一种选择,但我不知道Lucene性能是否带有文档备选(然后,我也会在MongoDB中看到它),或者,另一方面,反向索引和优化是完全的独立的文件导向.
我正在考虑将MongoDB用于我的下一个项目.此应用程序的核心要求之一是提供方面搜索.有没有人尝试使用MongoDB实现方面搜索?
我有一个产品型号,具有各种属性,如大小,颜色,品牌等.在搜索产品时,此Rails应用程序应在侧栏上显示构面过滤器.Facet过滤器看起来像这样:
Size:
XXS (34)
XS (22)
S (23)
M (37)
L (19)
XL (29)
Color:
Black (32)
Blue (87)
Green (14)
Red (21)
White (43)
Brand:
Brand 1 (43)
Brand 2 (27)
Run Code Online (Sandbox Code Playgroud) 我是NoSql数据库的新手,但我真的很喜欢使用官方c#驱动程序的MongoDB.它目前是我正在编写的MVC应用程序的后端,简单性和速度使我的生活更轻松.
但是我已经在应用程序中找到了我需要非常棒的搜索.我以前使用过Solr,但对ElasticSearch很感兴趣.
据我所知,ElasticSearch(从一个非常肤浅的层面)可以完成MongoDB作为文档数据库的所有功能.
所以,如果我已经在使用NoSql数据库,并且我需要很好的搜索,那么Mongo中有什么意义吗?用例是什么?
Mongo更快吗?更容易使用?它是BSON数据类型和驱动程序吗?为什么不使用ElasticSearch作为我的数据库?
我目前正在使用AppHarbor并且喜欢"云".我讨厌IT,只想专注于我的应用程序.话虽如此,我目前看到的唯一优势是:
Mongodb是一个nosql db,除了全文搜索之外,可以在其上运行任何查询,因为它会降低整体性能.Solr是一个搜索引擎.当我们将这两者结合在一起时,那么我们在两个系统中都没有相同的数据吗?因此,如果我们已经要存储数据,为什么我们不直接将它存储在solr和lucene中.顺便说一下,我不确定solr只存储索引或与数据一起存储的时间.