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]

这三条数据


3 回复

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 进行模糊查询,可以通过正则表达式实现相似查找。

希望这些解答对你有所帮助!

回到顶部