CouchDB Mango Query - сопоставить значение с элементом массива - PullRequest
1 голос
/ 04 июня 2019

Если у меня есть такие документы, есть ли запрос манго, который я могу использовать, чтобы найти все документы, где uid в массиве подписей соответствует uid в корневом документе?

{
    _id: "1",
    uid: "12345",
    signatures: [ { uid: "12345" } ]
},
{
    _id: "2",
    uid: "12345",
    signatures: [ { uid: "55555" } ]
}

Ожидаемый ответ даст мне только первый документ.

1 Ответ

1 голос
/ 05 июня 2019

Вы не можете ссылаться на значения, только на ключи - так что вы можете проверить, есть ли конкретный «uid» в массиве с

{
   "selector": {
      "signatures": {
         "$elemMatch": {
            "$eq": {
               "uid": "12345"
            }
         }
      }
   },
   "fields": [
      "_id",
      "_rev"
   ]
}

, но вы не можете утверждать, что uid должен быть равенк полю uid вне массива.

Конечно, с помощью представления проще достичь желаемого:

function(doc) {
  doc.signatures.forEach(function(elem) {
    if (elem.uid == doc.uid) {
      emit(null, null);
      return
    }
  });
}
...