小编Jes*_*sta的帖子

使用MongoDB更新数组字段内的特定键/值

作为序言,我已经和MongoDB一起工作了大约一个星期,所以这可能是一个非常简单的答案.

我已将数据存储在我的集合中,我们将调用此集合content,因为它包含文章,新闻等.其中每个都articles包含另一个数组author,其中包含所有作者的信息(地址,电话,标题等).

目标 - 我正在尝试创建一个查询,该查询将更新作者在特定作者所在的每篇文章上的地址,并且只更新指定的作者块(而不是阵列中存在的其他文章).

对特定文章的"全局更新"进行排序,该文章会影响他/她关于存在的每个内容的信息.

这是一个contentauthor外观相似的例子.

{ 
"_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)

mongodb

17
推荐指数
1
解决办法
7598
查看次数

Zend_Db_Select按随机顺序排列,兼容mssql/mysql

好的就是这种情况,我有一个用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()调用.

有任何想法吗?

php mysql sql-server zend-framework zend-db

5
推荐指数
1
解决办法
8895
查看次数

Zend_Search_Lucene查询解析问题

这是设置,我有一个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)

php lucene search zend-framework zend-search-lucene

2
推荐指数
1
解决办法
1044
查看次数