当出现db.collection is not a function报错时,原因是mongo版本升级为3.0以后api发生变化。
3.0:
回调函数返回的是访问对象的父对象。所以要
let db = client.db(‘forum’);
之后再访问数据库对象:
db.collection(‘forum’)
// 建立数据库
var MongoClient = require('mongodb').MongoClient;
//链接数据库
function _connectDB(callback) {
let url = 'mongodb://127.0.0.1:27017/forum';
MongoClient.connect(url, { useNewUrlParser: true }, function(err, client){
if(err){
callback(err, client);
return;
}
callback(err, client)
})
}
init(); // 初始化
function init(){
_connectDB((err, client) => {
if(err) {
console.log(err);
return;
}
let db = client.db('forum');
db.collection('forum').createIndex({'username': 1}, null, (err, result) => {
console.log('创建索引')
client.close();
})
})
}
数据更新
json1:筛选条件
json2:更新哪些字段 参数2需要使用 KaTeX parse error: Expected '}', got 'EOF' at end of input: …on.username}, {set: {
‘username’: fields.username
}}, callback)
参数3:如果没有筛选到符合条件的记录,是否需要将参数2插入到集合中,默认false,不插入
参数4:默认false,一次更新一条;true一次更新多条,此时参数2需要使用$set操作
exports.updateMany = function(collectionName, json1, json2, callback){
_connectDB((err, client) => {
let db = client.db('forum);
db.collection(cpllectionName).updateMany(json1, json2, (err, result) => {
if(err){
callback(err, null);
client.close();
return;
} else {
callback(null, result);
client.close();
}
)
`` })
})
}`
数据查找:
先判定有几个参数
// limit:限制每次查找几条信息
//skip:跳过n条显示
//sort:排序方式(+1 / -1)
exports.find = function(collectionName, json, argumentC, argumentD){
// 因为arguments的数量时可变的,不确定的。所以先判断参数的个数 3个或者4个
if(arguments.length === 3){
// 那么此时没有参数D
var callback = argumentC;
var skipNumber = 0; // 用于跳页
var limit = 0; // 限制每页的数量
} else if(arguments.length === 4){
var callback = argumentD;
var args = argumentC; // 将argumentC作为json传参
// 省略的条数 = 每页显示的数量*页数
var skipNumber = args.pageamount * args.page || 0;
var limit = args.pageamount || 0;
var sort = args.sort || {}; // 排序方式
} else {
throw new Error("find函数的参数个数,必须是3个,或者4个。");
return;
}
_connectDB((err, client) => {
let db = client.db('forum');
let result = []; //设置接受结果的数组
// limit:限制每次查找几条信息
//skip:跳过n条显示
//sort:排序方式(+1 / -1)
let rel = db.collection(collectionName).find(json).limit(limit).skip(skipNumber).sort(sort);
rel.each((err, doc) => {
// console.log(doc)
if(err){
callback(err, null);
client.close();
return;
}
// console.log(doc)
if(doc != null){
result.push(doc); // 循环遍历文档,将所有的文档都保存到结果数组中
} else {
callback(null, result); // 将结果返回
client.close();
}
})
// rel.forEach((val, index, arr) => {
// if(val != null){
// result.push(val);
// callback(null, result);
// client.close();
// } else {
// callback(null, result);
// client.close();
// }
// })
})
}
查找所有的数量
// count({}):全部
//count({‘username’: ‘aaa’}): 有条件的查找
// 得到所有comment的数量
exports.getCount = function(collectionName, json, callback){
_connectDB((err, client) => {
let db = client.db('forum');
db.collection(collectionName).count(json).then((count) => {
if(err){
callback(err, null);
client.close();
return;
}
callback(null, count);
client.close();
})
})
}
数据库 mondodb 命令
mongod --dbpath d:\mongo 开机数据库
另一个cmd :mongo 链接数据库
show dbs: 累出所有数据库
use databaseName: 使用数据库,如果没有则新建一个
db.databaseName.find() :查询该数据库下的所有
db.databaseName。insert({‘username’:‘zhagnsan’,"age’:38}) :插入数据
session应用 成为全局变量
一定要写在res.send()之前
req.session.login = 3;
req.session.username = fields.username;
读取:
req.session.login
req.session.username
在app处配置session
//配置session
app.use(session({
secret: ‘keyboard cat’,
resave: false,
saveUninitialized: true,
cookie : {
maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
},
}));