比较mongodb中同一文档中的多个值

时间:2015-06-17 18:21:23

标签: mongodb

我的问题是,如何查找版本的所有标题都包含艺术家姓名 以下是2个文档的例子:

`{"release" : {"title" : "DEF day",
            "artists" : {"artist" : {"role" : "1","name" : "DEF"}}}
    }

{   "release" : {"title" : "XYZ day",
             "artists" : {"artist" : {"role" : "1","name" : "KYC"}}}
    }`

当我运行以下查询时:

`db.test.find({$where:
  "this.release.title.indexOf(this.release.artists.artist.name) > -1"

})`

我得到的结果" DEF日",所以效果很好!! 但是,一旦我将此查询运行到我的原始数据(与上面相同的格式),我得到了这个:

`error: {
"$err" : "TypeError: Object 30 has no method 'indexOf'\n    at _funcs1 (_funcs1:1:49) near 'his.release.artists.a' ",
"code" : 16722

}`

我的收藏很大(8GB +)。 只是看看上面的错误,任何人都可以告诉上述查询可能存在什么问题?你的回答表示赞赏。请。

1 个答案:

答案 0 :(得分:0)

问题在于数据本身。在某个地方,您有一个文档,其中title字段不是String,因此在整个数据上调用indexOf,在该特定文档中您会收到错误。

你可以做的一件事就是找到错误的文件。为此,您需要运行一个简单的查询。

MongoDB有$type运算符,它按类型匹配字段。 here是MongoDB文档字段可以拥有的所有可用BSON类型的列表。

String BSON类型的ID为 2 ,因此您需要title字段类型不等于 {的所有文档{1}}

2

找到文件后,您可以修复或删除它们。