2016-04-02 10 views
0

Я только что начал использовать сервер MongoDB и RESTHeart api.Как избавиться от лишних ключей json от результата MongoDB

Я хочу заменить существующую БД на MongoDB, и существующая БД тоже получает json из остального api, я думал, что изменение будет немного. Итак, ниже вопрос:

Когда я запрос MongoDB, это то, что я получаю

{ 
    "_collection-props-cached": false, 
    "_embedded": { 
     "rh:doc": [ 
      { 
       "_etag": { 
        "$oid": "56ff559b7ea5c11edc8f93b7" 
       }, 
       "_id": { 
        "$oid": "56ff559b7ea5c11edc8f93b6" 
       }, 
       "_links": { 
        "self": { 
         "href": "/presence/active_watchers/56ff559b7ea5c11edc8f93b6" 
        } 
       }, 
       "callid": "[email protected]0.1.168", 
       "contact": "sip:[email protected]:5060;transport=UDP", 
       "event": "presence", 
      }, 
      { 
       "_etag": { 
        "$oid": "56ff55897ea5c11edc8f93b5" 
       }, 
       "_id": { 
        "$oid": "56ff55897ea5c11edc8f93b4" 
       }, 
       "_links": { 
        "self": { 
         "href": "/presence/active_watchers/56ff55897ea5c11edc8f93b4" 
        } 
       }, 
       "callid": "[email protected]", 
       "contact": "sip:[email protected]:5060;transport=UDP", 
       "event": "presence", 
       "event_id": "", 
      } 
     ] 
    }, 
    "_etag": { 
     "$oid": "56ff44807ea5c11edc8f93a6" 
    }, 
    "_id": "active_watchers", 
    "_links": { 
     "curies": [], 
     "self": { 
      "href": "/presence/active_watchers" 
     } 
    }, 
    "_returned": 2, 
    "descr": "subscriptions collection" 
} 

Я заинтересован только в rh_doc массива. Мой вопрос: есть ли способ, которым я могу просто получить только документы из Monogo без дополнительной информации.

Проблема в том, что существующий код ожидает только массив значений, например [{callid:"123",...},{callid:"234",...}], и он был закодирован таким образом в C, используя cJSON. Страшно трогать код C!

Или может быть, если CJSON может удалить ключи: _etag, _id т.д.

Редактировать Это, как я запрос:

http GET "http://localhost:8080/presence/active_watchers?filter={'presentity_uri':'sip:[email protected]'}&filter={'event':'presence'}" 

Благодаря

+0

Если я вас правильно, вы можете захотеть использовать [проекцию] (https://docs.mongodb.org/ manual/reference/glossary/# term-projection) –

+0

Как вы запрашиваете коллекцию, чтобы получить текущий результат? –

+0

@MarkusWMahlberg Спасибо. Я думаю, что это то, что требуется, я сейчас изучаю его. – Jardanian

ответ

0

Во втором аргумент вашего оператора find вы можете указать, какие поля включать.

E.g.

db.someCollection.find({}, {_embedded: 1}) 

Или, если вы хотите только вложенную RH: поле Документов

db.someCollection.find({}, {"_embedded.rh:doc": 1}) 
+0

Спасибо, Джон. '{_embedded: 1}' дает 0 результатов, поэтому я попробовал '{_embedded: 0}', это дает результат, но когда я пытаюсь сделать это с помощью restheart, я получаю 0 документов в обоих случаях. '{ "_collection-реквизита-кэшированные": ложь, "_etag": { "$ OID": "56ff44807ea5c11edc8f93a6" }, "_ID": "active_watchers", "_links": { «кюри «: [], "Я": { "HREF": "/presence/active_watchers?filter={'_embedded.rh:doc':'1' }" }} , "_returned": 0, "descr": "subscriptions collection" } ' – Jardanian

+0

Добавить ключи = {'_ embedded': 1} в качестве параметра get для вашего запроса на восстановление. –

+0

Я попробовал 'keys = {'_ embedded': 1}' и 'keys = {'rh: doc': 1}" и 'keys = {'_ embedded.rh: doc': 1}" и с '& np 'то, что я получаю, является либо полным документом, как в вопросе, либо я получаю только ключи свойств, а не фактические ключи. Не знаю, что я делаю неправильно. – Jardanian