【问题标题】:Node Mongo - can't find document节点 Mongo - 找不到文档
【发布时间】:2017-11-27 18:06:14
【问题描述】:

我找不到文件。我有一个具有这种结构的集合"registosORS"

  {
    "_id" : ObjectId("5a1959d75e0b410558e515be"),
    "sessao" : "1",
    "proprioResponsavel" : "on",
    "outroResponsavel" : "",
    "relacao" : "",
    "valorIndividualmente" : "1",
    "valorInterpessoal" : "1",
    "valorSocialmente" : "1",
    "valorGlobalmente" : "1",
    "cliente_id" : "5a1407c8099ca208e48170a5",
    "email" : "mgoncalves@psi.uminho.pt",
    "data" : 1511610839374
}

我想通过cliente_id 值查找文档。

一切正常,但是当我进入"registosORS" 集合查询时,结果是null

ClientesDAO.prototype.insereDadosOrs = function(dadosORS, date, callback){
    this._connection.open(function(err,mongoClient){
        mongoClient.collection('clientes', function(err,collection){
            collection.findOne({email:dadosORS.email}).then(function(result){

                    var cliente_id = result._id;
                    dadosORS.data = date;
                    mongoClient.collection('registosORS', function(err,collection)                        {
                    collection.insert(dadosORS);

                    dadosSessao = {
                        cliente: cliente_id,
                        data: dadosORS.data,
                        numero : dadosORS.sessao
                    }

我相信问题出在这里:

mongoClient.collection('registosORS', function(err,collection){
                        collection.findOne({cliente_id:client_id, data:dadosORS.data}).then(function(result){ 
                        console.log(result);

结果是null。我哪里失败了?

【问题讨论】:

  • 我认为client_iddadosORS.data 的值与您收藏中存储的值不对应。你检查过这些值吗?
  • 如果我对我得到的这些值创建一个 console.log: cilente_id = 5a1407c8099ca208e48170a5 和 dadosORS.data = 1511724182264 (已更新,因为它是集合的新文档),但最后的结果查询为空
  • 这很令人困惑,因为我在我身边检查它(当然使用不同的数据)并且它有效。您是否尝试仅使用 cliente_id 检查结果?
  • 嗯,是的,我做了 console.log(cliente._id) ...

标签: node.js mongodb mongodb-query nodes


【解决方案1】:

你解决了吗?

这部分应该产生什么结果?是objectID的字符串吗?

var cliente_id = result._id;

如果它应该获取 objectID 字符串并用于查询,那么它将与您的 cliente_id 字符串不匹配。 var 将产生 objectID。应该先解析成 JSON 并取 objectID

var cliente_id = result._id.toJSON().$oid

这只是我的猜测。希望对你有帮助

【讨论】:

  • 嗨dundun,这还没有解决,我相信答案与您的评论有关。我正在尝试调试,但它没有给我任何日志……我应该放 .$oid 吗?它有什么作用?
  • 当我这样做时 --- var cliente_id = result._id.toJSON().$oid; --- 它说的 client_id 是未定义的..
  • 好的,它工作了 var cliente_id = result._id.toJSON() 。只是为了好奇,值得保存对象引用还是只保存字符串,有什么区别吗?
  • 对我来说,将 objectID 保存为对象引用总是更好,因为如果我将来需要它们作为 objectID,我不会把它误认为字符串。很高兴它对你有用
【解决方案2】:

我想你这里有一个错字:cliente_id:client_id 应该是 cliente_id:cliente_id

【讨论】:

  • 我已经检查过了,错字在这里而不是在代码中。
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多