2015-09-12 8 views
0

Я новичок в Cloudant, но нашел его полезным для первого этапа данных IoT. Но мне нужно подписаться на изменения, основанные на поле id, которое отделено от _id и является уникальным для датчика, который отправляет данные. Примеры, которые я видел до сих пор, не помогли с этой проблемой. Теперь я отправляю отдельный json-документ для каждого сообщения, поэтому он должен возвращать новые документы с этим идентификатором датчика. В json docs иногда приходит вторая, но это может быть и часы.Уведомления об изменениях в облаке

Я использую C# в веб-приложении .Net. Приведенный ниже код создает вызов к базе данных Cloudant и возвращает данные, которые я хочу на основе индекса, который был создан для поля SensorId,

json = 
{{ 
    "selector": { 
    "SensorID" : "h7365cf3-17bc-4422-b436-f7bcf12b2e2a" 
    }, 
    "fields": [ 
    "Data" 
    ] 
}} 

url = My Cloudant url + ” /_find”. 

Это возвращает все документы с полем SensorId, что соответствует значению SensorId в json-запросе, но только json-объект каждого документа, вложенного в поле Data.

using (WebClient client = new WebClient()) 
      { 
       byte[] postBytes = System.Text.ASCIIEncoding.UTF8.GetBytes(json.ToString()); 
       client.UseDefaultCredentials = true; 
       client.Credentials = new NetworkCredential(username, password); 

       client.Headers[HttpRequestHeader.ContentType] = "application/json"; 

       var response = client.UploadData(url, "POST", postBytes); 
       JObject iJson =  JObject.Parse(client.Encoding.GetString(response)); 

       return parseIncoming(iJson); 

      } 

Когда вызов в Мой Cloudant URL + «GET/_DB_UPDATES», он возвращает информацию об изменениях всей базы данных. Это можно настроить как непрерывную подачу.

Я надеялся, что это означает, что я могу подписаться на изменения в документах, чтобы получить новые данные, такие как Redis Pub/Sub. Я начинаю думать, что это может быть не так, но если кто-нибудь может показать мне, как это сделать, я был бы благодарен.

+0

Привет, Dan, вам нужно разместить здесь код, чтобы кто-то мог помочь. –

+1

Обратите внимание на запрос _changes. Это может помочь вам, когда вы используете «feed = continu». Подробности здесь https://docs.cloudant.com/database.html#get-changes –

ответ

1

Как @ adasilva70 сказал, вам необходимо использовать питание _changes.

Вы можете фильтровать изменения с помощью соответствующей функции фильтра (чтобы отображались только изменения в отношении интересующих вас документов).

Вы можете получать все обновления с указанной точки последовательности (все, начиная с последних данных) и/или использовать длительный опрос или непрерывный режим для мгновенных уведомлений.

Смежные вопросы