在MongoDB中,给定find()运算符返回一组行的游标,这是一种惯用且省时的方式来返回“上下文”行,即按顺序在该组中的每一行之前和/或之后的行?
对我来说,最简单的解释这个概念的方法是使用ack,它支持上下文搜索。给定一个文件:
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
Run Code Online (Sandbox Code Playgroud)
这是ack的输出:
C:\temp>ack.pl -C 2 "line 4" test.txt
line 2
line 3
line 4
line 5
line 6
Run Code Online (Sandbox Code Playgroud)
我将日志数据存储在MongoDB集合中,每行一个文档。每个日志都将每个标记化为关键字,并对这些关键字进行索引,这使我获得了便宜的全文搜索。
我执行一个沼泽标准:
collection.find({keywords: {'$all': ['key1', 'key2']}}, {}).sort({datetime: -1});
Run Code Online (Sandbox Code Playgroud)
并得到一个光标。在此阶段,不添加任何其他字段,获取上下文的方法是什么?我认为流程是这样的:
对于具有R行的结果集,这需要2R + 1查询。
但是,我认为我可以权衡时间。是否可行的替代方案是在后台用上下文_id更新每一行?对于当前具有字段的给定行:
_id, contents, keywords
Run Code Online (Sandbox Code Playgroud)
我会添加一个附加字段:
_id, contents, keywords, context_ids
Run Code Online (Sandbox Code Playgroud)
然后我可以在随后的搜索中以某种方式使用这些context_ids吗?我对MongoDB MapReduce完全不熟悉,但是那也可以出现吗?
我认为最直接的方法是将实际上下文行的全文存储在每一行中,但这对我来说似乎有点粗糙。明显的优势是,单个查询可以返回我需要的上下文。
我感谢接受问题范围的所有答案。我意识到我可以带外使用Lucene或真正的全文本搜索引擎,但是我想体验一下MongoDB的优势和功能,所以我希望能得到MongoDB特定的答案。谢谢!
目前我有一个应用程序,我可以使用JdbcOdbcDriver访问.mdb或.accdb文件以附加一些数据.
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
Run Code Online (Sandbox Code Playgroud)
但在此,我需要配置系统DSN.我们需要添加新的数据源(Microsoft Access Driver),然后需要提供.mdb文件的位置.只有这样,上面的代码才有用.
假设我想在其他系统上运行我的应用程序,那么我需要对该计算机执行相同的操作.如果我将我的应用程序提供给客户端,他/她不知道如何配置.mdb文件.那么我的全部努力都会浪费.因此,我可以使用任何驱动程序通过我的Java代码创建.mdb文件,然后将所有数据附加到.mdb文件的表中.或者还有其他方法,Java代码可以创建.mdb文件并能够访问此数据库文件.
我尝试了这个代码,无需配置系统DNS即可附加数据:
public class TestMsAccess {
private static Connection con;
private static Statement stm;
private static String tableName = "EmpDetail";
private static int id_is = 2;
private static String name_is = "Employee1";
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\MSAccessProject/Employee.mdb", "", "");
stm = con.createStatement();
// enter value into table
String addRow = "INSERT INTO " + tableName + " VALUES ( "
+ …Run Code Online (Sandbox Code Playgroud) 我试图理解sql递归语句,但对我来说真的很难.例如:

这是一个我想要了解并记下输出的例子.
能不能一步一步地解释一下这是如何运作的?
问候和提前thx
玛雅
要求: MATLAB数据库工具箱的开源替代品.
背景:我在工作场所提供了MATLAB,但不幸的是它没有获得Mathwork的数据库工具箱许可.
研究完成:虽然我是新手,但我在互联网上搜索了很多,我发现为我工作的是DBtool盒子Dbtool的演示版本(http://energy.51.net/dbtool/index.htm).但是,DB工具箱的演示版仅适用于小型数据库.但每当我在大型数据库上使用它时,我都会"超时错误".
谢谢你的帮助 Nikhil
在我使用Sqlite和FTS表在我的应用程序中实现全文搜索功能后,我会感兴趣的是从我的FTS表中检索FULL倒排索引的高效方法.实际上 - 我需要一个结果表,包括所有术语之间的映射 - > docid - >出现次数.
遵循Sqlite FTS 文档 - 在创建表之后
-- Create an FTS4 table
CREATE VIRTUAL TABLE ft USING fts4(x, y);
-- Create an fts4aux table to access the full-text index for table "ft"
CREATE VIRTUAL TABLE ft_terms USING fts4aux(ft);
Run Code Online (Sandbox Code Playgroud)
...和内容插入......
INSERT INTO ft(x, y) VALUES('Apple banana', 'Cherry');
INSERT INTO ft(x, y) VALUES('Banana Date Date', 'cherry');
INSERT INTO ft(x, y) VALUES('Cherry Elderberry', 'Elderberry');
Run Code Online (Sandbox Code Playgroud)
...而不是像FTS AUX表中的所有文件中只有条款和出现次数......
SELECT term, col, documents, occurrences FROM ft_terms;
-- apple | * …Run Code Online (Sandbox Code Playgroud) 我是数据库和Web开发的新手,但是我正在尽自己最大的努力通过创建自己的动态网站来学习自己的方式。我正在逐步研究它,目前正在纸上设计数据模型。我想知道如何为网站构建一个数据库,该数据库可以像stackoverflow这样进行投票?如果存在一个包含问题列表的表,则用户创建的每个问题都会添加到该表中。这个表上不能简单地有一个计数选票的字段,因为那将允许一个人拥有无限的选票,对吗?因此,应该有一个连接到另一个表的密钥,该表计数票数并跟踪用户,以便他们不能两次投票,对吗?如果这是真的,这就是我感到困惑的部分。给出的每个答案也可以投票。
请注意,我并不是在问stackoverflow是如何做到的,而是关于用户体验的概念是如何工作的。
我还想做的一件事是查询单个用户的活动,因此,如果必须为提交的每个数据动态创建所有这些表,随着时间的流逝创建大量的表,不是吗?解析每个表以检查特定用户是否提交了任何数据或投票是否真的很慢?
是否有更好的方法可以使人们以外行的方式进行解释?不需要特定的代码...我可能可以在以后的时候弄清楚。我现在只是在理论化并建立一个纸模型以供日后使用。
编辑:哦,我明白了。我在考虑数据库表时会想到类似excel的电子表格,因此,如果我的理解是错误的,请纠正我。因此,整个站点范围内的每个表决都在一个表中(在电子表格中垂直列出),每个表都有(水平)一行数据,这些数据将表决链接到各种所有者(用户和问题或答案)?那是对的吗?我说问题还是答案,因为我不明白这样一种情况:将它们都作为投票属性(不确定这是否是正确的术语)会有意义,而不是为答案和问题创建两个单独的投票数据被投票。基本上按我的方式看,每行代表一个投票,共有3个字段:1。值(+1或-1),2。来自谁(用户名),3。什么(问题或答案)。
当我试图完成我的工作时,我遇到了这样的问题.
给定数据集,对于每个项目,存在D维度,并且可以将C值设置为每个维度.
例如,数据集事(ID,所有者,颜色,重量),ID是主键
的所有者属性可以是翘,千斤顶,扎克 ;
该颜色属性可以是红色,黄色,绿色 ;
的重量属性可以是高,中,低 ;
在该数据集中,D = 3,C = 3
现在我想做很多次查询,例如:
"有没有所有者=红色和颜色=红色的数据"?
"有没有重量=低的数据"?
"有没有所有者=红色和颜色=红色和重量=高"的数据?
我只需要"是或否"来回答这个问题.
我最初需要这样做,我的意思是没有数据库.
在PC中,我尝试使用Bitmap和倒排索引来完成要求,但数据集的大小将为百万,Dimensionality将为8~18,基数将为5~15.结果,效率不够好.
你能给我任何建议让它更有效吗?
提前致谢!
我正在使用phonegap为iOS创建一个测验风格的应用程序.该应用程序允许用户创建然后进行测验.
目前我正在使用HTML5数据库,使用phonegap API来存储测试和结果数据.我担心的是,当设备存储空间已满时,iOS 5.1现在可以删除数据库.
无论如何都要标记存储数据库的webkit缓存文件夹,以便永远不会删除它?如果这是不可能的,那么有任何关于存储始终持久的数据的方法的建议.
我正在尝试更改SQL Server 2000更新触发器,但它挂起并悬挂和挂起.为什么会发生这种情况,我该怎么做呢?这是一个很长的触发器,这可能是为什么?
触发代码很长,但缩写如下:
ALTER TRIGGER [dbo].[UP_AL_ItemUPCs] ON [dbo].[AL_ItemUPCs]
FOR UPDATE
AS
SET XACT_ABORT ON
Declare @vError varchar(254)
Declare @iUpdateCount int
Select @iUpdateCount = Count ( D.UPCID )
From deleted D
If @iUpdateCount > 1
Begin
Raiserror ( 'This Table maintains AVANTI data ... mass updates cannot be done, yet' , 16 , 1 )
Rollback
Goto Exit_
End
Declare @iUpdateCheck int
Declare @OldItemNumber varchar(50)
Declare @ItemNumber varchar(50)
Declare @OldItemPrefix varchar(5)
Declare @ItemPrefix varchar(5)
Declare @OldItemCode varchar(25)
Declare @ItemCode varchar(25) …Run Code Online (Sandbox Code Playgroud) database ×10
sql ×3
sql-server ×2
algorithm ×1
cordova ×1
driver ×1
find ×1
indexing ×1
ios ×1
iphone ×1
java ×1
matlab ×1
mongodb ×1
ms-access ×1
mysql ×1
open-source ×1
performance ×1
postgresql ×1
recursion ×1
ruby ×1
schema ×1
search ×1
sqlite ×1
statements ×1
voting ×1