如何通过查询字符串轻松实现连接

Posted

技术标签:

【中文标题】如何通过查询字符串轻松实现连接【英文标题】:how to Restfully implement joins via a query string 【发布时间】:2015-01-27 22:49:27 【问题描述】:

我们的堆栈目前使用 mongoose 作为 ODBM,我想知道我应该如何实现 RESTFUL 请求来确定是否填充了外键(即外键 _id 属性被替换为整个文档或部分来自另一个集合的文档)。

我知道我可以发送类似的东西

?populate=CollectionName&populateFields=fieldsnames`

通过一个查询字符串,但对我来说这似乎很老套,我想知道在这种情况下什么被认为是标准/最佳实践

【问题讨论】:

【参考方案1】:

MongoDb 没有连接。如果关联数据足够小,建议嵌入文档。 如果你采用这种方法,那么你可以执行这个简单的查询来检查嵌入的文档字段是否是一个文档。

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 类型。

RESTful URL

用于检查文档属性的 restful 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 : ""

更多信息:

文档:BSON spec

【讨论】:

【参考方案2】:

在我看来,允许允许客户端添加或删除资源端点返回的字段的查询参数并不难。我建议阅读this article 了解 RESTful 最佳实践。所以你的 URL 看起来像这样:

假设您在谈论 GET 路线

GET /users/:user_id?fields=field1,some_other_field

您不需要在 RESTful URL 中表示您的数据库。从客户的角度思考。如果您不设计数据库,对您有什么意义?我认为 API 应该公开行为,而不是数据库。

【讨论】:

以上是关于如何通过查询字符串轻松实现连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 'group by' 查询中连接字符串字段的字符串?

如何在MySQL中连接两个字符串

如何设置两个连接字符串 MySqlCommand 对象参数?

如何安全地创建一个查询,该查询将列出给定表名的列名,以及可能指向 SQL Server 或 MySQL 的连接字符串?

java通过jdbc查找数据,查出id值,如何通过整型变量存储这个id值

如何实现查询字符串认证