【问题标题】:How to pass JSON MongoDB Query object from Swift?如何从 Swift 传递 JSON MongoDB 查询对象?
【发布时间】:2020-09-28 04:15:58
【问题描述】:
  • 我正在将 JSON 数据 从我的 iOS 应用程序传递到我的后端 MongoDB 服务器
  • JSON 数据 包含两个父字段 userDataqueryData
  • 我通过 POST 请求将其作为req.body 传递,并以req.body.userDatareq.body.queryData 检索服务器中的数据
  • 我使用 swift CODABLE 将此对象编码为 JSON 并将其发送到服务器

一切正常。我能够提取req.body.userData 并使用它。我不明白的是,如何从 req.body.queryData 中提取 mongo 查询 并将其传递给 mongo find() 方法?

例如 - 我如何通过

{
  "fieldOne": {"$in": [1, 2, 3]}, 
  "fieldTwo": {"$ne": "Admin"}
}

以上是MongoDB语法过滤数据。如何让我的 codable 结构发送这种格式?现在我只是将结构声明为 string。我是使用服务器端和 JSONS 的新手。

这是我的结构 - 就像我说的,req.body.userData 工作正常

struct QueryData: Codable {
        var fieldOne: String
        var fieldTwo: String
    }

【问题讨论】:

  • 你的例子不是真正的 JSON 字符串,它应该是 { "fieldOne": {"$in": [1, 2, 3]}, "fieldTwo": {"$ne": “管理员”} }
  • @ChaolongLiao 是的,没错。我发布了 NodeJS 格式。在 NodeJS 中,字段值是不带引号的。现在将编辑它
  • 也许您可以使用这个库找到一些解决方案:github.com/mongodb/mongo-swift-driver。希望您没有直接从 iOS 应用程序执行任何 mongodb 查询
  • @Zyigh 这个驱动似乎直接访问了 mongo 数据库。是的,我没有直接从 ios 应用程序执行任何查询或访问数据库。服务器处理它。只是想弄清楚如何将过滤器选项发送到服务器
  • @Archid 我在一个 Swift 后端项目中使用了那个库,它对于我们想要做的事情来说已经足够了。我无法告诉您对应用程序大小的影响,但它可能是一个有用的解决方法,因为类型 BSONDocument 实现了 Codable 并且可以轻松编码。我没有将其写为答案,因为添加整个库以仅使用一种数据结构可能有点“野蛮”,但是当您必须处理类似 MongoDB json 的格式时,它真的很方便

标签: ios swift mongodb mongodb-query


【解决方案1】:
import Foundation

let mongo = """
{
  "fieldOne": {"$in": [1, 2, 3]},
  "fieldTwo": {"$ne": "Admin"}
}
"""

struct FieldOne: Codable {
    var `in`: [Int]
    
    private enum CodingKeys: String, CodingKey {
        case `in` = "$in"
    }
}

struct FieldTwo: Codable {
    var ne: String
    
    private enum CodingKeys: String, CodingKey {
        case ne = "$ne"
    }
}

struct QueryData: Codable {
    var fieldOne: FieldOne
    var fieldTwo: FieldTwo
}

let jsonObject = try! JSONSerialization.jsonObject(with: mongo.data(using: .utf8)!, options: [])
print(jsonObject)

我尝试在 swift playground 中解析你的示例

【讨论】:

  • 为什么您不使用您创建的Codable 模型,而是使用JSONSerialization
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2017-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多