关于MongoDB的查询语句组合
开发中使用了MongoDB,不是很熟悉,感觉提问这个都不知道该怎么问才好。
直接上代码好了,希望能帮忙看出问题。。
BSONObjBuilder b;
__int64 cnt = db::instance().count("offline_msg");
b.appendNumber("id", cnt);
b.appendNumber("to_id",(__int64)tar_id);
b.append("source_nick", _info.nick);
b.appendNumber("source_id",(__int64)_id);
b.appendNumber("type", (int)e_offline_cheat_msg);
time_t time_now = time(NULL);
b.appendTimeT("send_time", time_now);
b.append("details", str);
b.appendNumber("read", 0);
string the_error;
the_error = db::instance().insert_with_check_str("offline_msg", b.done());
添加记录,db::instance().insert_with_check_str是个封装函数,
string db::insert_with_check_str(const string& ns, BSONObj& b)
{
ScopedDbConnection conn(db_addr, 10000);
conn->insert(db_name+ns,b);
return conn->getLastError();
}
然后想读取 to_id为指定id 和 read 等于 0,并且添加时间在3天以内的记录
time_t time_latest = time(NULL) - 3*24*3600;
vector<BSONObj> result_v;
db::instance().find_n(result_v, "offline_msg", BSON("to_id" << (__int64)_id << "read" << 0 << "send_time" << BSON( "$gte" << time_latest )), 50);
db::instance().find_n为封装:
void db::find_n( vector<BSONObj>& out, const string&ns, BSONObj& q, int nToReturn )
{
ScopedDbConnection conn(db_addr, 10000);
return conn->findN(out, db_name+ns, Query(q), nToReturn );
}
但是这样写出后读取不出任何的条目,把find_n中的最后的
"send_time" << BSON( "$gte" << time_latest )去掉的话,可以读出所有的条目
但是单把最后的时间限定加上的话也是读不出任何条目的
查了下相关的手册,比对,也看不出什么不对的地方。。。
实在没什么招了。。。。。手比较新,如果问题傻,希望别鄙视- -谁没白痴过,花了一天查这个东东了~~