错误:键$ conditionalHandlers不能以'$'mongodb开头

时间:2013-10-28 19:45:27

标签: jquery node.js mongodb mongoose

我有mongodb的问题,尤其是node.js的mongoose包。我有以下架构:

var Schema = mongoose.Schema;

var location = new Schema ({
  nomville: {type: String, required: true},
  description: {type: String, required: true},
  quartier: [quartier],
  critere: [misc],
  modified: {type: Date, default: Date.now}
});

var misc = new Schema ({
  publictransp: {type: Number},
  culture: {type: Number},
  traffic: {type: Number},
  nature: {type: Number},
  supermarket: {type: Number},
  school: {type: Number},
  sport: {type: Number},
  nightlife: {type: Number},
  mean: {type: Number}
});

var rue = new Schema ({
  nomrue: {type: String},
  modified: {type: Date, default: Date.now}
});

var quartier = new Schema ({
  nomquartier: {type: String},
  listerue: [rue],
  modified: {type: Date, default: Date.now}
})

var ObjModel = mongoose.model('Obj',location);

当我尝试使用Jquery查询发布此模式的对象时,我得到了这个:

[错误:键$ conditionalHandlers不能以'$'开头]

有什么想法吗?我完全坚持这个。

EDIT1:这是帖子功能:

//CREATE PRODUCTS
app.post('/api/products', function(req,res){
  var product;
  console.log("POST: ");
  console.log(req.body);
  product = new ObjModel({
    nomville: req.body.nomville,
    description: req.body.description,
    quartier: [quartier],
    critere: [misc],
  });
  product.save(function(err){
    if (!err) {
      return console.log("created");
    } else {
   return console.log(err);
    }
  });
  return res.send(product);
});

EDIT2:这是查询

 jQuery.post("/api/products", {
  "nomville": "Strasbourg",
  "description": "Ville de Strasbourg",
  "quartier": [
    {
      "nomquartier": "Centre",
      "listerue": [
          {
            "nomrue": "22 Novembre"
          },
          {
            "nomrue": "Abattoir"
          },
          {
            "nomrue": "Fonderie"
          },
          {
            "nomrue": "Francs Bourgeois"
          }
      ]
    },
    {
      "nomquartier": "Cité de l'Ill",
      "listerue": [
          {
            "nomrue": "Anguille (chemin de l)"
          },
          {
            "nomrue": "Civelles (promenade des)"
          },
          {
            "nomrue": "Hechner (rue)"
          },
          {
            "nomrue": "Phario (pont)"
          }
      ]
    },
    {
      "nomquartier": "Krutenau",
      "listerue": [
          {
            "nomrue": "Abreuvoir (rue de l)"
          },
          {
            "nomrue": "Bain Finkwiller (rue du)"
          },
          {
            "nomrue": "Fustel de Coulanges (quai)"
          },
          {
           "nomrue": "Hôpital (place de l)"
          }
      ]
    }
  ],
  "critere":[
    {
      "publictransp": 2,
      "culture": 8,
      "traffic": 5,
      "nature": 7,
      "supermarket": 3,
      "school": 5,
      "sport": 6,
      "nightlife": 4,
      "mean": 5
    },
  ]
}, function(data, textStatus, jqXHR) {
    console.log("Post resposne:"); console.dir(data); console.log(textStatus);         console.dir(jqXHR);
});

这是我在发布查询后得到的结果:

[
  {
    "nomville": "Strasbourg",
    "description": "Ville de Strasbourg",
    "_id": "526ecdd3a78290010c000004",
    "__v": 0,
    "modified": "2013-10-28T20:49:23.235Z",
    "critere": [],
    "quartiers": [
      {
        "_id": "526ecdd3a78290010c000005",
       "listerue": []
     }
    ]
  }
]

这是正常的吗?

1 个答案:

答案 0 :(得分:1)

在定义其中任何一个架构之前,您在critere架构定义中引用了misclocation。这导致了一些有些神秘的错误,可能是因为mongoose由于模式定义中的意外undefined值而将无效查询拼凑在一起。

除此之外,我不知道你在这里做了什么:

product = new ObjModel({
  nomville: req.body.nomville,
  description: req.body.description,

  // Are the next two lines a mistake?  It appears as though you're trying
  // to create an object using the schemas.
  quartier: [quartier],
  critere: [misc],
});