MongoDB索引数组仅部分工作

时间:2012-02-12 12:55:45

标签: arrays mongodb indexing multikey

我知道这个主题已经有很多,但没有一个问题可以帮助我继续。 我有一个通过GridFS的文件上传系统,它生成如下文档:

    { "_id" : ObjectId( "4f3723607b5c0b8d01060000" ),
  "filename" : "7326_150970547928_746052928_2521002_2164327_n.jpg",
  "filetype" : "image/jpeg",
  "title" : "Indexed File 1",
  "author" : "chewbacca",
  "document" : "Rechnungen",
  "keywords" : { "0" : "Darth",
    "1" : "Vader",
    "2" : "Haut",
    "5" : "Putz",
    "6" : "Pushy" },
  "uploadDate" : Date( 1329013600519 ),
  "length" : 61423,
  "chunkSize" : 262144,
  "md5" : "c73cce0bb6f349007635751f9a1a7ddd" }

正如您所看到的,我有一个字段'keywords',它是一组关键字。 我想建立一个搜索选项来搜索与全文搜索相当的字段。 因此,我单独索引字段“关键字”。

db.fs.files.ensureIndex({ keywords : 1 })

现在的问题是,这有时会起作用。或者说昨天它在一些文件上工作,但在一些文件上它找不到任何东西。

假设我做了上面的索引,我会认为

> db.fs.files.find({keywords : "Vader"})

会给我上面打印的文件。或者我错过了什么?

(我唯一的解释是,这可能是:创建索引需要花费大量时间,而且还没有准备好,这几乎是不可能的,或者选项'背景'存在一些问题, 'dropDups','unique'等......

我尝试了一切。我放弃了索引;

> db.fs.files.dropIndexes()

再次创造它们。始终通过

进行控制
> db.fs.files.getIndexes()

但不,我无法得到任何结果......

我还尝试在将数据保存到数据库之后通过PHP进行索引。 为此,我使用以下代码:

    $gridFS->ensureIndex(array('keywords' => 1), array("unique" => true));

或者没有唯一选项。


正如我所说,有时候这可行,我可以查询关键字,但有时我不能。或者找到一些关键字,但其他文件没有找到。 是不是每个文档都没有索引?

请有人帮助我,我真的没有在这里得到这个问题!

谢谢。

1 个答案:

答案 0 :(得分:3)

我建议您在关键字中使用true数组:

"keywords" : ["Darth", "Vader", "Haut", "Putz", "Pushy"],

因此,预计以下内容将起作用:

db.fs.files.ensureIndex({ keywords : 1 })
db.fs.files.find({keywords : "Vader"})