Nodejs 又是白痴问题 关于mongoose
Nodejs 又是白痴问题 关于mongoose
var m=require(‘mongoose’);
var db=m.createConnection(‘localhost’,‘m’); var model=new m.Schema( { “tt”:String, “mm”:Number } ); var bl=db.model(‘xxx’, model);
bl.update({mm:555}, {mm:444}, { multi: true }, function (err, numberAffected, raw) { if (err){console.log(err)} });
为啥这货跑到xxxes集合去了而不是xxx集合。
为啥update里有个{ multi: true }。
还有。mongoose能否相似查找,如关键词为111,希望查询到
[11111,
22222111,
dsfsdfsdfdsf111]
这三条数据
Node.js 又是白痴问题 关于mongoose
问题描述
在使用 Mongoose 进行数据库操作时,遇到了一些疑惑。具体代码如下:
var mongoose = require('mongoose');
// 创建数据库连接
var db = mongoose.createConnection('localhost', 'm');
// 定义 Schema
var schema = new mongoose.Schema({
"tt": String,
"mm": Number
});
// 创建模型
var Bl = db.model('xxx', schema);
// 更新操作
Bl.update({ mm: 555 }, { mm: 444 }, { multi: true }, function (err, numberAffected, raw) {
if (err) {
console.log(err);
}
});
问题1: 为什么更新操作跑到 xxxes
集合去,而不是 xxx
集合?
答案:
在 Mongoose 中,如果你定义的模型名称是一个单数形式(如 xxx
),Mongoose 默认会将该名称转换为复数形式来作为集合名(如 xxxes
)。如果你想自定义集合名,可以通过传递第四个参数来实现:
var Bl = db.model('xxx', schema, 'custom_collection_name');
这样,Mongoose 就会使用 custom_collection_name
作为集合名。
问题2: 为什么 update
操作里有一个 { multi: true }
?
答案:
{ multi: true }
是一个选项,用于指示是否对多个匹配的文档进行更新。如果设置为 true
,则会对所有符合条件的文档执行更新操作。例如,如果你想要更新所有 mm
字段值为 555
的文档,可以使用 { multi: true }
选项。
如果没有指定 { multi: true }
,那么默认只会更新第一个匹配的文档。
问题3: Mongoose 是否支持模糊查询?
答案:
Mongoose 支持模糊查询,你可以使用正则表达式来实现。假设你想根据关键词 111
查询包含该关键词的数据,可以这样做:
Bl.find({ tt: /111/ }, function (err, docs) {
if (err) {
console.log(err);
} else {
console.log(docs);
}
});
上述代码会查找 tt
字段中包含 111
的所有文档。
示例
假设你有以下数据:
[
{ "tt": "11111", "mm": 1 },
{ "tt": "22222111", "mm": 2 },
{ "tt": "dsfsdfsdfdsf111", "mm": 3 }
]
执行上面的查询后,将会返回包含 111
的所有文档。
希望这些解答能帮助你更好地理解和使用 Mongoose!
使用正则可以模糊查找 var search = /在这里写正则/; find({key: search})
Node.js Mongoose 相关问题解答
1. 为什么 update
操作会更新到 xxxes
集合?
在 Mongoose 中,默认情况下,模型名会自动转换为复数形式来确定集合名称。因此,如果你定义的模型名为 xxx
,Mongoose 会默认将它映射到 xxxes
集合。
示例:
var m = require('mongoose');
var db = m.createConnection('localhost', 'm');
var model = new m.Schema({
"tt": String,
"mm": Number
});
var bl = db.model('xxx', model);
bl.update({ mm: 555 }, { mm: 444 }, { multi: true }, function (err, numberAffected, raw) {
if (err) {
console.log(err);
}
});
在这种情况下,Mongoose 默认将 xxx
映射为 xxxes
集合。如果你想自定义集合名称,可以在创建模型时指定:
var bl = db.model('xxx', model, 'xxx'); // 指定集合名称为 xxx
2. 为什么 update
方法中有一个 { multi: true }
参数?
{ multi: true }
参数用于指示是否更新多个匹配的文档。如果设置为 true
,则会更新所有符合条件的文档。如果不设置该参数或设置为 false
,则只会更新第一个匹配的文档。
示例:
// 更新所有符合条件的文档
bl.update({ mm: 555 }, { mm: 444 }, { multi: true }, function (err, numberAffected, raw) {
if (err) {
console.log(err);
} else {
console.log(`Updated ${numberAffected} documents`);
}
});
3. 如何进行模糊查询(相似查找)?
Mongoose 提供了 $regex
查询操作符来进行模糊搜索。例如,假设你想查询包含特定关键词的文档,可以使用 $regex
来实现。
示例:
var query = { tt: { $regex: /111/, $options: 'i' } }; // 忽略大小写
bl.find(query, function (err, results) {
if (err) {
console.log(err);
} else {
console.log(results);
}
});
在这个例子中,我们使用正则表达式 /111/
来查找 tt
字段中包含 111
的所有文档,并且忽略大小写 ($options: 'i'
)。
总结
- Mongoose 默认将模型名转换为复数形式作为集合名称。
{ multi: true }
参数用于更新多个匹配的文档。- 使用
$regex
进行模糊查询,可以通过正则表达式实现相似查找。
希望这些解答对你有所帮助!