在mongo之间的日期值

时间:2015-04-23 11:00:00

标签: mongodb

我只是在日期介于两个日期和下一句之间时才尝试更新:

db.periodo.update(
               {"id_linea" : id_linea, "id_contexto" : id_contexto,$min:   { "fecha_hora_inicio": fecha_desde }, $max:    {"fecha_hora_inicio": fecha_hasta} },
               { $set: { "id_fase": id_fase } },
               { multi: true }
            )

我的第一个问题是我的结构是:

id_linea
id_contexto
periodo 
  id_fase 
  fecha_hora_inicio

如果我想将periodo中的日期作为条件使用,是否足以放置“fecha_hora_inicio”或者我必须使用periodos.fecha_hora_inicio引用?

当我尝试这两句话时,我得到以下失败:

error: {
    "$err" : "Can't canonicalize query: BadValue unknown top level operator: $min",
    "code" : 17287
}

我重新进行了咨询,因为我发现了错误:现在我的咨询是:

       db.collection.update(
               {"id_linea" : id_linea, "id_contexto" : id_contexto }, { $min: { "periodos.fecha_hora_inicio": fecha_desde }} , {$max: {"periodos.fecha_hora_inicio": fecha_hasta}} ,
               { $set: { "id_fase": id_fase }},
               { multi: true })

 }

当我在robomongo中尝试使用值时,例如:

   db.grupo_periodo.find(
               {"id_linea" : 145, "id_contexto" : 151 }, { $min: {  "periodos.fecha_hora_inicio": 2015-04-16 16:51:34  }} , {$max: {"periodos.fecha_hora_inicio": 2015-04-27 16:51:34 }}        
 }

我找到错误:第3行:意外号码

2 个答案:

答案 0 :(得分:1)

我的第一个回答后的一些主要编辑。

grupo_periodo集合中文档的结构如下:

{
  id_linea: 145,
  id_contexto: 151,
  periodo: [
    {
      fecha_hora_inicio: new Date(2014, 10, 10),
      id_fase: 'f'
    },
    {
      fecha_hora_inicio: new Date(2014, 9, 10),
      id_fase: 'f'
    }
  ]
}

你想要更新" id_fase" " periodo"符合某个日期范围的对象。

您要找的是"positional $ update"

这是一个完整的例子来了解这项工作:

db.grupo_periodo.insert({
  id_linea: 145,
  id_contexto: 151,
  periodo: [
    {
      fecha_hora_inicio: new Date(2014, 10, 10),
      id_fase: 'f'
    },
    {
      fecha_hora_inicio: new Date(2014, 9, 10),
      id_fase: 'f'
    }
  ]
});

db.grupo_periodo.insert({
  id_linea: 145,
  id_contexto: 151,
  id_fase: 'f',
  periodo: [
    {
      fecha_hora_inicio: new Date(2014, 10, 10),
      id_fase: 'f'
    },
    {
      fecha_hora_inicio: new Date(2014, 6, 10),
      id_fase: 'f'
    }
  ]
});

db.grupo_periodo.insert({
  id_linea: 145,
  id_contexto: 151,
  id_fase: 'f',
  periodo: [
    {
      fecha_hora_inicio: new Date(2014, 6, 10),
      id_fase: 'f'
    }
  ]
});

var query = {
  id_linea: 145,
  id_contexto: 151,
  'periodo.fecha_hora_inicio': {
    $gt: new Date(2014, 6, 1),
    $lt: new Date(2014, 6, 30)
  }
};

//let's update all "periodo" elements in the arrays matching the query:

db.grupo_periodo.update(query, {
  $set: {
    'periodo.$.id_fase': 'updated'
  }
}, {
  multi: true
});

//now query:
db.grupo_periodo.find(query)

上一次查询的结果是:

{
  "_id" : ObjectId("5538f5dacae6e0da9298ec4b"),
  "id_linea" : 145,
  "id_contexto" : 151,
  "id_fase" : "f",
  "periodo" : [
    {
      "fecha_hora_inicio" : ISODate("2014-11-10T03:00:00Z"),
      "id_fase" : "updated"
    },
    {
      "fecha_hora_inicio" : ISODate("2014-07-10T03:00:00Z"),
      "id_fase" : "f"
    }
  ]
}
{
  "_id" : ObjectId("5538f5dbcae6e0da9298ec4c"),
  "id_linea" : 145,
  "id_contexto" : 151,
  "id_fase" : "f",
  "periodo" : [
    {
      "fecha_hora_inicio" : ISODate("2014-07-10T03:00:00Z"),
      "id_fase" : "updated"
    }
  ]
}

显示特定periodo文档已更新id_fase

答案 1 :(得分:0)

  if(collection !=null){

      db.collection.update(
               {"id_linea" : id_linea, "id_contexto" : id_contexto , periodos: { $elemMatch: { "fecha_hora_inicio": { $lte: fecha_hasta }, fecha_hora_fin: { $gt: fecha_desde } }}}  ,
               { $set: { "periodos.$.id_fase": id_fase }},
               { multi: true })

 }

现在一切都很完美。