2

我正在尝试编写一个过滤器来将数据复制到另一个 CouchDB 服务器。作为过滤器的一部分,我想根据过滤器只选择文档的某些部分。fieldsin可以获取根节点,Selector但是如何选择嵌套元素?

这些是示例文档结构:

{
    "_id" : "1231212",
    "name" : "",
    "a" : [
    {
      "x" : "123",
      "y": "123" ,
      "z" : 123"",
      "l" : [1, 2, 3]
    },
    {
      "x" : "456",
      "y": "456" ,
      "z" : "456",
      "l" : [4, 5, 6]
    }
  ]
}
{
    "_id" : "34534545",
    "name" : "",
    "a" : [
    {
      "x" : "222",
      "y": "333" ,
      "z" : 444"",
      "l" : [6, 7, 8]
    },
    {
      "x" : "66",
      "y": "66" ,
      "z" : "888",
      "l" : [2, 9, 7]
    }
  ]
}

是否可以放置一个选择器来选择字段,它是数组中的一个元素。在上面的 Doc 结构中,我可以使用数组“l”中的元素过滤数据,但我只能显示该元素。

{
   "selector": {
    "a": {
        "$elemMatch": {
            "l": {
                "$in": [
                4
                ]
            }
        }
    }
  },
   "fields": [
      "name",
      "a"
   ]
}

如果我使用这个选择器,它会给出“a”数组的两个元素。但我只需要过滤后的元素。

对于上述过滤器,我期待:

{
    name : "",
    "a" : [
    {
      "x" : "456",
      "y": "456" ,
      "z" : "456",
      "l" : [4, 5, 6]
    }
  ]
}

我得到的是

{
    "_id" : "1231212",
    "name" : "",
    "a" : [
    {
      "x" : "123",
      "y": "123" ,
      "z" : 123"",
      "l" : [1, 2, 3]
    },
    {
      "x" : "456",
      "y": "456" ,
      "z" : "456",
      "l" : [4, 5, 6]
    }
  ]
}

可能吗?

4

0 回答 0