我使用Node.js和MongoDB与猫鼬。 当我执行下面的代码时,第一个更新代码工作正常。但是在插入'bar'的第二个更新查询中出现错误'not okForStorage'。不okForForStorage MongoDB中的错误,Node.Js(猫鼬)
它的循环和插入数据一遍又一遍,但错误发生在第一次插入,所以我不认为这是有效载荷问题,也没有任何其他硬件问题。
analyze('SomeText',function(err,data){
if(err) throw err;
for(var i=0; i < data.foo.length;i++){
if(!data.foo[i]){
continue;
}
var condtion = { foo: data.foo[i]};
var update = {
$inc :{totalcounter : 1},
counter : {
date : dateformat(new Date(), "yyyymmdd"),
$inc :{counter : 1}
}
};
db.foodb.update(condtion,update,{upsert : true},function(err, numberAffected, raw){
if(err) throw err;
//Data added successfully
});
for(var g=0;g < data.bar[i].length;g++){
update = {
bar : {
foo : data.bar[i][g],
$inc : { totalcounter : 1},
counter : {
date : dateformat(new Date(), "yyyymmdd"),
$inc :{counter : 1}
}
}
};
db.foodb.update(condtion,update,{upsert : true},function(err, numberAffected, raw){
if(err) throw err;
//getting error here 'MongoError: not okForStorage'
});
}
}
});
假设保留的数据是一样的东西
data.foo = ['10','20','30'];
data.bar = [[11,12,13],[21,22,23],[31,32,33]];
,我多么想将数据插入到数据库是
{
foo : 10,
totalcounter : 1,
counter :{ date : 20131231,counter : 1},
bar : {[ foo : 11,totalcounter : 1,counter : {date : 20131231,counter : 1}],
[foo : 12,totalcounter : 1,counter : {date : 20131231,counter : 1}],
[foo : 13,totalcounter : 1,counter : {date : 20131231,counter : 1}]
}
}
此外,即使我明确地分配时间如'20131231'。它将被忽略,ISODate类型(1970-01-01T05:35:40.109Z)中的默认时间将被保存。 据我所知,我需要遵循IOSDate格式类型来存储日期。 但我不想因为某些原因包含小时和分钟/秒。 除了将'date'设置为Number对象之外,是否有任何有效的方法来做到这一点?
谢谢你的一切协助。
我到目前为止发现的是使用'$ inc'的方式是错误的。 看来我需要把它们放在一起但是“$ inc:{totalcounter:1,counter.counter:1}”给我一个语法错误。这可能是一个非常新手的问题,但任何人都可以提出正确的写法吗? – suish