使用字符串类型数据在日期中查找mongo

时间:2014-06-02 10:42:02

标签: javascript node.js mongodb

我有我的数据在mongodb上这样存储:

{ 
    "_id" : { "$oid" : "5385a437084ea4734b03374f" },
    "linea" : 1, 
    "egunak" : [ 
        { 
            "fetxa" : "2014/05/26", 
            "turnoak" : [ 
                 { 
                     "turno" : 1,
                     "ordenes" : [ 
                         { "ref" : "3CI00001" },
                         { "of" : "OF000d013" }
                     ]
                 }, 
                 { 
                     "turno" : 2, 
                     "ordenes" : [ 
                         { "ref" : "3CI00001" }, 
                         { "of" : "112-2233" }, 
                         { "ref" : "3CI0-0001" },
                         { "ref" : "666" }, 
                         { "ref" : "33" }, 
                         { "ref" : "3355" },
                         { "ref" : "345" },
                         { "ref" : "1234" } 
                     ] 
                 },
                 { 
                     "turno" : 3,
                     "ordenes" : [
                         { "ref" : "3CI00001" },
                         { "ref" : "12" }
                     ]
                 }
            ]
        }, 
        { "fetxa" : "2014/05/27" },
        {
            "fetxa" : "2014/05/28",
            "turnoak" : [
                { 
                    "turno" : 1,
                    "ordenes" : [
                        { "ref" : "3CI0-0001" },
                        { "of" : "OF200013" }
                    ]
                },
                { 
                    "turno" : 2,
                    "ordenes" : [
                        { "ref" : "3CI00001-" },
                        { "of" : "OF232233" },
                        { "of" : "OF289977" }
                    ]
                },
                { 
                    "turno" : 3,
                    "ordenes" : [
                        { "ref" : "3CI00001" },
                        { "of" : "OF200-000" },
                        { "ref" : "3CI00001" },
                        { "of" : "OF200000" },
                        { "ref" : "3CI00001" }
                    ]
                }
            ]
        }, 
        { "fetxa" : "2014/05/29" },
        { "fetxa" : "2014/05/30" },
        { "fetxa" : "2014/05/31" },
        { "fetxa" : "2014/06/01" }
    ]
},
{ 
    "_id" : { "$oid" : "5385a448084ea4734b033750" },
    "linea" : 2,
    "egunak" : [
        {
            "fetxa" : "2014/05/26",
            "turnoak" : [
                { 
                    "turno" : 2,
                    "ordenes" : { "ref" : "123" } 
                }
            ]
        },
        {
            "fetxa" : "2014/05/27",
            "turnoak" : [
                {
                    "turno" : 1,
                    "ordenes" : [
                        { "ref" : "3CI00002" },
                        { "of" : "2OF000013" }
                    ]
                },
                { 
                    "turno" : 2,
                    "ordenes" : [
                        { "ref" : "3CI00001" },
                        { "of" : "2OF2233" },
                        { "ref" : "3CI00001" },
                        { "ref" : "999" }
                    ]
                },
                {
                    "turno" : 3,
                    "ordenes" : [
                        { "ref" : "3CI00001" }
                    ]
                }
            ]
        },
        { 
            "fetxa" : "2014/05/28",
            "turnoak" : [
                {
                    "turno" : "2",
                    "ordenes" : { "ref" : "66" }
                }
            ]
        },
        {
            "fetxa" : "2014/05/29",
            "turnoak" : [
                { 
                    "turno" : 1,
                    "ordenes" : [
                        { "ref" : "3CI00001" },
                        { "of" : "2OF200013" }
                    ]
                },
                { 
                    "turno" : 2,
                    "ordenes" : [
                        { "ref" : "3CI00001" },
                        { "of" : "2OF232233" },
                        { "ref" : "3CI00001" }
                    ]
                },
                { 
                    "turno" : 3,
                    "ordenes" : [
                        { "ref" : "3CI00001" },
                        { "of" : "2OF200000" },
                        { "ref" : "3CI00001" },
                        { "of" : "2OF200000" }, 
                        { "ref" : "3CI00001" }
                    ]
                }
            ]
        },
        { "fetxa" : "2014/05/30" },
        { "fetxa" : "2014/05/31" },
        { "fetxa" : "2014/06/01" }
    ]
}

现在我想查找两个日期之间的数据,但数据是用字符串存储的,我该如何实现?或者我需要以日期格式存储我的数据?

这是我在nodejs上的持久化函数:

exports.save = function(req, res){
    db.open(function(err, db) {
        if(!err) {
            var data = req.body;
            var BSON = mongo.BSONPure;
            var o_id = new BSON.ObjectID(data._id);

            db.collection('test').update({'_id': o_id}, { $set :{ egunak: data.egunak } }, {safe:true, multi:false, upsert:false}, function(e, result){
                if (e) console.log(e)
                res.send((result===1)?{msg:'success'}:{msg:'error'})
            })

        } else {
            onErr(err, function(){
                console.log(err);
            });
        }
    });
};

$ set值是我的JSON。如何存储日期数据?

2 个答案:

答案 0 :(得分:0)

  • 你可以一直使用
  

JSON.stringify(js_object); //这将js Object转换为字符串格式的对象

发送数据之前,

  

JSON.parse(object_in_string_format); //将字符串格式的对象转换回js对象。

收到数据后

。阅读更多Mozilla MDN

  • 您应该将日期时间存储在日期类型

  • 然后您可以像以下一样“选择”:

    db.collection('Datuak').find(
      {"egunak.fetxa": {"$gte": new Date(1979, 1, 1), //date type here
                      "$lt": new Date(2222, 12, 31)}
      }
    )
    

答案 1 :(得分:-2)

虽然最好以DATE格式存储日期,但如果仍需要解决方法,则可以使用Date.parse(date)函数以毫秒为单位获取值。我在mongodb 2.4.8中尝试了以下,两者都运行良好

var d = Date.parse("March 21, 2012"); 
var d = Date.parse("2014/03/21");

现在'd'将包含以毫秒为单位的数据,您可以使用它来查找两个日期之间的数据。