【问题标题】:Converting Mongodb query to mgo将 Mongodb 查询转换为 mgo
【发布时间】:2020-01-19 19:09:15
【问题描述】:

我正在尝试在 mongo 中进行查询,基本上将是...获取与此实例 ID 匹配且状态不等于已删除或已拒绝的所有文档。我想出了如何在 mongodb 查询中执行此操作,但在将其转换为 golang mgo 时遇到问题。

这是 mongodb 查询:

db.getCollection('instance_documents').find( {"$and":[
        { "status": {"$nin":['DELETED', "REJECTED"] }},
        {"_id": “instanceID”}
    ]
})

这是我到目前为止在 golang 中尝试过的,查询无法正常工作,它什么也不返回:

err := appInstanceCollection.Find(bson.M{
        "$and": []bson.M{
                    {"status": bson.M{"$nin": []string{"REJECTED", "DELETED"}}},
                    {"_id": instanceID},
            },
    }).One(&instance)

【问题讨论】:

  • 明确地说,您正在检查错误,对吗?您遇到的是无错误的空结果集?如果是这种情况,我担心你的问题出在其他地方。也许是数据?服务器是如何配置的?也许某种数据类型不匹配?它当然不是 mgo 查询。您的 instance 结构是否正确设置了标签?

标签: go mongodb-query mgo


【解决方案1】:

$and 在这里是不必要的。 Mongo 要求查询中的所有字段都为真,以便在结果集中返回文档。尝试将它们全部设置在同一个 bson.M 中:

err := appInstanceCollection.Find(bson.M{
    "status": bson.M{"$nin": []string{"REJECTED", "DELETED"}},
    "_id": instanceID,
  },
}).One(&instance)

至于为什么您提供的$and mgo 查询不起作用,我不确定。我觉得很好。

【讨论】:

  • 我试过了,好像也没用。最初对于状态,我只使用 $ne 忽略已删除的那些,而且效果很好。
猜你喜欢
  • 1970-01-01
  • 2018-08-28
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多