我们的堆栈当前使用mongoose作为ODBM,我想知道我应该如何实现RESTFUL请求以确定是否填充了foregin密钥(即forgeign key _id属性被替换为整个文档或部分文件来自另一个集合的文件)。
我知道我可以发送类似
的内容?populate=CollectionName&populateFields=fieldsnames`
通过一个查询字符串,但有些东西对我来说似乎很烦人,我想知道在这种情况下什么被认为是标准/最佳实践
答案 0 :(得分:0)
MongoDb没有加入。如果关联数据足够小,则建议嵌入文档。 如果您使用该appoarch,那么您可以执行此简单查询以检查嵌入的文档字段是否为文档。
0 < db.products.count({_id : 3, rebateProgram : { $type : 3} })
在猫鼬中,我认为是
0 < productModel.find({}).where({_id : 3, rebateProgram : { $type : 3} }).count()
rebateProgram : {$type : 3}
表示只与rebateProgram字段匹配(如果它与嵌入文档一致)。
3是嵌入文档的BSON类型。
检查文档上的属性的一个安静的URL可能如下所示。
请求将是GET,因为您正在检索值而不修改任何数据。
GET: /??/:collectionName/:documentId/action
请求:
GET: /api/products/3/status?hasObject=rebateProgram
响应:
{
id: 3,
hasObject : { rebateProgram : true },
success : true,
errMsg : ""
}
但是,如果它始终与您要检查的字段相同,则在响应中包含嵌入字段的状态。 像这样。 例如:
请求:
GET: /api/products/3/status
响应:
{
id: 3,
hasValidRebateProgram : true,
success : true,
errMsg : ""
}
更多信息:
答案 1 :(得分:0)
允许客户端添加或删除资源端点返回的字段的查询参数在我看来并不严重。我建议您阅读有关RESTful最佳做法的this article。所以你的URL看起来像这样:
假设您正在谈论GET路线
GET /users/:user_id?fields=field1,some_other_field
您不需要在RESTful URL中表示您的数据库。从客户的角度思考。如果你没有设计数据库,你会有什么意义?我认为API应该暴露行为,而不是数据库。