如何使用Restivus和Curl查找一个文档

时间:2015-11-28 11:31:18

标签: mongodb rest curl meteor

使用Restivus时,我有一个简单的初学者问题。

在我的app.js中,我宣布:

Players = new Mongo.Collection("players");

以及后来:

if (Meteor.isServer) {
  // Global configuration
  Api = new Restivus({
    useDefaultAuth: true,
    prettyJson: true
  });

  // Generates: GET/POST on /api/v1/players, and GET/PUT/DELETE on     /api/v1/players/:id
  // for Meteor.users collection (works on any Mongo collection)
  Api.addCollection(Players);
  // That's it! Many more options are available if needed...
}

然后我开始“meteor mongo”

meteor:PRIMARY> db.players.insert({username:"Kalle", location:"Home"})
WriteResult({ "nInserted" : 1 })

meteor:PRIMARY> db.players.insert({username:"Pelle", location:"Away"})
WriteResult({ "nInserted" : 1 })

meteor:PRIMARY> db.players.find({});
{ "_id" : ObjectId("56598d83846a7b53e8a1176b"), "username" : "Kalle","location" : "Home" }
{ "_id" : ObjectId("56598d8c846a7b53e8a1176c"), "username" : "Pelle", "location" : "Away" }

当我使用CURL尝试时,我得到:

curl -X GET http://localhost:3000/api/players
{
  "status": "success",
  "data": [
    {
      "_id": {
        "_str": "56598d83846a7b53e8a1176b"
      },
      "username": "Kalle",
      "location": "Home"
    },
    {
      "_id": {
        "_str": "56598d8c846a7b53e8a1176c"
      },
      "username": "Pelle",
      "location": "Away"
    }
  ]

但是当我试图找到一个特定的文件时:

curl -X GET http://localhost:3000/api/players/56598d83846a7b53e8a1176b
{
  "status": "fail",
  "message": "Item not found"
}

为什么不找到该文件并与之达成协议:

"_id": {
    "_str": "56598d83846a7b53e8a1176b"
 }

1 个答案:

答案 0 :(得分:0)

由于meteor mongo只是打开一个MongoDB shell,因此文档是使用_id的ObjectId创建的(这是MongoDB ID的默认类型)。

Meteor默认为_id s的随机字符串。因此,示例中的_id不仅仅是您看到的字符串,而是包含它的整个ObjectId。

要使其工作,要么在mongo shell中显式设置_id,要么(可能更好)使用meteor shell直接从Meteor服务器插入文档。