作为序言,我已经和MongoDB一起工作了大约一个星期,所以这可能是一个非常简单的答案.
我已将数据存储在我的集合中,我们将调用此集合content,因为它包含文章,新闻等.其中每个都articles包含另一个数组author,其中包含所有作者的信息(地址,电话,标题等).
目标 - 我正在尝试创建一个查询,该查询将更新作者在特定作者所在的每篇文章上的地址,并且只更新指定的作者块(而不是阵列中存在的其他文章).
对特定文章的"全局更新"进行排序,该文章会影响他/她关于存在的每个内容的信息.
这是一个content与author外观相似的例子.
{
"_id" : ObjectId("4c1a5a948ead0e4d09010000"),
"authors" : [
{
"user_id" : null,
"slug" : "joe-somebody",
"display_name" : "Joe Somebody",
"display_title" : "Contributing Writer",
"display_company_name" : null,
"email" : null,
"phone" : null,
"fax" : null,
"address" : null,
"address2" : null,
"city" : null,
"state" : null,
"zip" : null,
"country" : null,
"image" : null,
"url" : null,
"blurb" : null
},
{ …Run Code Online (Sandbox Code Playgroud) 好的就是这种情况,我有一个用Zend_Framework编写的应用程序,它兼容MySQL和MSSQL作为后端.现在,ZF非常擅长解决这两种语言之间的许多SQL差异/差异,但我还没有想出这个.
目标是从表中选择1个随机记录,这是一个非常简单的陈述.
这是一个select语句,例如:
$sql = $db->select()
->from("table")
->order("rand()")
->limit(1);
Run Code Online (Sandbox Code Playgroud)
这适用于MySQL数据库表,因为MySQL的sql如下:
SELECT `table`.* FROM `table` ORDER BY rand() ASC
Run Code Online (Sandbox Code Playgroud)
另一方面,现在MSSQL使用newid()函数进行随机化.
有没有某种帮助我可以传递给order()函数,以使它意识到它必须使用正确的顺序?我搜索了文档和zfforums,发现了一些提示,但没有什么可靠的.
我找到的其中一件事是:
ORDER BY RANDOM()无效 - ZFForums.com
他们使用以下内容:
$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
Run Code Online (Sandbox Code Playgroud)
它工作...但我不打算通过键入它并对字符串进行替换来构建我的select语句,我试图将它保存在相同的Zend_Db_Select对象中.我也尝试过Zend_Db_Expr('RANDOM()')进入->order()声明,但它失败了.他还发布了一个理论解决方案来找到答案,但我不打算重写这个函数,修改$ db-> fetch()调用.
有任何想法吗?
这是设置,我有一个Lucene索引,它适用于我索引的2,000个文档.我一直在使用Luke(Lucene Index Toolbox,v.0.9.2)来调试查询,并使用ZF 1.9.
我的Lucene索引的布局如下:
I = Indexed
T = Tokenized
S = Stored
Fields:
author - ITS
category - ITS
publication - ITS
publicationdate - IS
summary - ITS
title - ITS
Run Code Online (Sandbox Code Playgroud)
基本上我有一个可以通过上述字段搜索的表单,让你混合和匹配任何上述信息,并将其解析为zend luceue查询.这不是问题,问题是当我开始组合术语时,在查找中触发的"优化"方法会导致查询消失.
这是我正在运行的示例搜索:
表格版本:
Title: test title
Publication: publication name
Run Code Online (Sandbox Code Playgroud)
Lucene查询解析:
+(title:test title) +(publication:publication name)
Run Code Online (Sandbox Code Playgroud)
现在,如果我接受此查询字符串,并将其打入LUKE,然后点击"搜索",则返回结果就好了.当我使用查询查找方法时,它会爆炸.所以我做了一些关于它如何运作并发现问题的研究(我相信)
首先,下面是执行搜索的实际代码行:
$searchQuery = "+(title:test title) +(publication:publication name)";
$hits = new ArrayObject($this->index->find($searchQuery));
Run Code Online (Sandbox Code Playgroud)
它是实际代码的简化版本,但这就是它生成的内容.
现在继续调试后我注意到的是,"优化"方法只会破坏查询本身.我创建了以下代码:
$rewrite = $searchQuery->rewrite($this->index);
$optimize = $searchQuery->rewrite($this->index)->optimize($this->index);
echo "======<br/>";
echo "Original: ".$searchQuery."<br/>";
echo "Rewrite: ".$rewrite."<br/>";
echo "Optimized …Run Code Online (Sandbox Code Playgroud)