json - 如何在 couchdb 中索引多维数组

标签 json database mapreduce couchdb cloudant

我有一个多维数组,我想使用 CouchDB(真正使用 Cloudant)对其进行索引。我的用户有他们所属团队的列表。我想搜索以找到该团队的每个成员。因此,获取所有具有 id 为 79d25d41d991890350af672e0b76faed 的团队对象的用户对象。我试图在“Teams.id”上创建一个 json 索引,但它没有用,因为它不是一个直接数组而是一个多维数组。

用户

{
 "_id": "683be6c086381d3edc8905dc9e948da8",
 "_rev": "238-963e54ab838935f82f54e834f501dd99",
 "type": "Feature",
 "Kind": "Profile",
 "Email": "gc@gmail.com",
 "FirstName": "George",
 "LastName": "Castanza",
 "Teams": [
  {
   "id": "79d25d41d991890350af672e0b76faed",
   "name": "First Team",
   "level": "123"
  },
  {
   "id": "e500c1bf691b9cfc99f05634da80b6d1",
   "name": "Second Team Name",
   "level": ""
  },
  {
   "id": "4645e8a4958421f7d843d9b34c4cd9fe",
   "name": "Third Team Name",
   "level": "123"
  }
 ],
 "LastTeam": "79d25d41d991890350af672e0b76faed"
}

最佳答案

这很像我在 Cloudant Selector Query 的回复但这是适用于您的问题的交易:

运行此查询的最简单方法是使用“Cloudant Query”(或“Mango”,在即将发布的 CouchDB 2.0 版本中称为“Mango”)——而不是 CouchDB 中的传统 MapReduce View 索引系统。 (这篇博客介绍了差异:https://cloudant.com/blog/mango-json-vs-text-indexes/ 而这篇是概述:https://developer.ibm.com/clouddataservices/2015/11/24/cloudant-query-json-index-arrays/)。

您的 CQ 索引应该如下所示:

{
  "index": {
    "fields": [
      {"name": "Teams.[].id", "type": "string"}
    ]
  },
  "type": "text"
}

随后的查询是什么样的:

{
  "selector": {
    "Teams": {"$elemMatch": {"id": "79d25d41d991890350af672e0b76faed"}}
  },
  "fields": [
    "_id",
    "FirstName",
    "LastName"
  ]
}

您可以在 Cloudant 仪表板的“查询”部分或通过 curl 使用类似这样的东西自己尝试:

curl -H "Content-Type: application/json" -X POST -d '{"selector":{"Teams":{"$elemMatch":{"id":"79d25d41d991890350af672e0b76faed"}}},"fields":["_id","FirstName","LastName"]}' https://broberg.cloudant.com/teams_test/_find

该数据库是全局可读的,因此您可以在此处查看我在其中创建的示例文档:https://broberg.cloudant.com/teams_test/_all_docs?include_docs=true

深入挖掘宋飞正传主题 :D

关于json - 如何在 couchdb 中索引多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35784178/

相关文章:

c# - 使用 System.Web.Script.Serialization.JavascriptSerializer 反序列化 JSON - 怎么做?

ios - 如何将可映射对象保存到 nsuserdefault?

sql-server - 代码没有错误,但它没有恢复数据库

database - 如何建模或查询关系代数中不存在的东西

Hadoop 映射器发出一个唯一的键。我可以在每个 map 之后执行 reducer 吗?

java - MapReduce 单元测试无法模拟 DistributedCache.getLocalCacheFiles

json - 使用自定义 JSON BODY 进行 HTTP post 的最佳方式是什么

json - 从 Flask 后端获取对 Angular 的 JSON 响应

php - Laravel 5.2 注册后将数据存储在另一个数据库中

java - 如何从Java将级联作业提交到远程YARN群集?