2

这是我的收藏:

{
  "offset" : 0,
  "rows": [ 
    {
      "_id" : { "$oid" : "5199e109f456aab938b304de" }, 
      "type" : "cluster", 
      "id" : "1", 
      "vertices_transformation" : [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ], 
      "vertices" : [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ], 
      "v_attributes" : [[0.5,0.8,1], [0.6,0.9,1], [0.44,0.8,0.7],[0,1,0]]
    },
    {
      "_id" : { "$oid" : "5199d8f8f456aab938b304db" }, 
      "type" : "model", 
      "id" : "modello1", 
      "name" : "MODELLO 1", 
      "description" : "1 modello di prova", 
      "clusters" : [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ], 
      "clusters_tree" : [ 1, 2, 3, [ 4, 5, 6, 7 ], [ 8, 9, 10, 11 ] ] 
    }
  ],
  "total_rows" : 2,
  "query" : { "type" : "cluster", "id" : 1 } ,
  "millis" : 1
}

我想按类型过滤,然后按 id 过滤,这是我的查询:

http://xxxx/db/collections/?filter_type=cluster&filter_id=1

但是这个查询的结果是0行,但是如果只按类型查询,则成功返回该行。为什么我的查询不适用于 id?

在此先感谢您的帮助。

4

1 回答 1

0

原因是类型不匹配:

// your record:
"id" : "1" // id is a string

// your query
"id" : 1   // id is a number

显然,REST 接口对看起来像数字的查询参数进行了一些隐式转换。不过,我不知道如何防止这种情况发生。

编辑: httpie可以在消息正文中将查询作为 JSON 发送。这样可行:

$ http get 'http://127.0.0.1:28017/DB/COLLECTION/' 'filter_id=678' 
...
{
  "filter_id": "678" // id is sent as a string
}
...
"total_rows" : 1     // and now it matched a record

我不知道您使用的是什么客户端,但请尝试在正文中将查询作为 JSON 发送(但请务必将其作为GET请求,当您使用POSTMongoDB 时,您正在创建记录)。

于 2013-05-20T10:09:39.767 回答