2

我正在尝试为 OrionCB 中现有实体的属性创建订阅。

网址 http://130.206.80.120:1026/NGSI10/subscribeContext

方法 POST

标头内容类型:应用程序/xml

身体

<?xml version="1.0"?>
<subscribeContextRequest>
  <entityIdList>
    <entityId type="finesce_meteo" isPattern="false">
      <id>finesce_meteo</id>
    </entityId>
  </entityIdList>
  <attributeList>
    <attribute>precip</attribute>
  </attributeList>
  <reference>http://localhost:5050/notify</reference>
  <duration>P100Y</duration>
  <notifyConditions>
    <notifyCondition>
      <type>ONCHANGE</type>
      <condValueList>
        <condValue>precip</condValue>
      </condValueList>
    </notifyCondition>
  </notifyConditions>
  <throttling>PT5S</throttling>
</subscribeContextRequest>

此操作检索 200 个 OK 标头代码,正文如下:

<subscribeContextResponse>
  <subscribeResponse>
    <subscriptionId>54c5f049286043784451d08b</subscriptionId>
    <duration>P100Y</duration>
    <throttling>PT5S</throttling>
  </subscribeResponse>
</subscribeContextResponse>

问题是当我试图检查它是否已创建时。当我尝试列出订阅时,它不会出现。我正在使用这条线:

echo 'db.csubs.find().pretty()' | mongo orion

但是如果我用 unsubscribeContextRequest 删除这个订阅,我会得到 200 OK 代码。它表明此订阅存在。

订阅存在的事实(因为它已创建和删除正常),并且在我列出订阅时没有出现,这是罕见的。

请问,有事吗?

我正在尝试启动这个 whit cygnus 进程,并停止与 cygnus 相同的进程,获得相同的结果。

问候

4

1 回答 1

0

Mongofind()命令返回与查询匹配的前 20 个结果,因此,如果您的订阅数多于该数(例如超过 30 个),则可能无法检索到您正在搜索的特定结果。(使用 mongo 交互式 shell,您可以使用该命令获得下一批 20 个结果it,但不确定当 mongo 在非交互模式下运行时这是如何工作的)。

因此,我建议您在查询中包含要搜索的 id。例如,如果您在 Orion 请求中获得的 id 是“54c90821286043500575eecf”,那么您可以使用:

echo 'db.csubs.find({_id: ObjectId("54c90821286043500575eecf")}).pretty()' | mongo orion

此外,由于您只期望一个结果,您可以使用findOne()并保存 的用法pretty(),即:

echo 'db.csubs.findOne({_id: ObjectId("54c90821286043500575eecf")})' | mongo orion
于 2015-01-28T16:11:41.047 回答