Nodejs与mongodb的终级难题

Nodejs与mongodb的终级难题

那位大师知道用 find 操作mongodb库的时候,如何对字段重命名, 如:

    > db.Foods.findOne();
{
        "name" : "锛圙IF 鍥惧儚锛?6x11 鍍忕礌锛?gif",
        "imgUrl" : "2012_11_17锛圙IF 鍥惧儚锛?6x11 鍍忕礌锛?gif",
        "money" : "10",
        "source" : "C",
        "address" : "涓浗娴嬭瘯",
        "time" : 1355748279000,
        "_id" : ObjectId("50cf13b7abbfa2041d000001")
}

不知道为没有方法 把_id修改为id输出(或是 把time修改为mytime),我希望得到的结果如下:

{
            "name" : "锛圙IF 鍥惧儚锛?6x11 鍍忕礌锛?gif",
            "imgUrl" : "2012_11_17锛圙IF 鍥惧儚锛?6x11 鍍忕礌锛?gif",
            "money" : "10",
            "source" : "C",
            "address" : "涓浗娴嬭瘯",
            "mytime" : 1355748279000,
            **"id" : ObjectId("50cf13b7abbfa2041d000001")**
    }

感觉有点像操作数据的sql语句

select mytime  time form Foods

17 回复

在 Node.js 中使用 MongoDB 时,我们经常需要处理从数据库中获取的数据,并对其进行一些格式上的调整。例如,你可能希望将 _id 字段重命名为 id,或将 time 字段重命名为 mytime

虽然 MongoDB 的查询操作(如 find)本身不支持直接重命名字段,但我们可以使用 JavaScript 来实现这一点。以下是一个简单的示例,展示了如何通过 Node.js 和 Mongoose(一个流行的 MongoDB 对象建模工具)来实现这一需求。

示例代码

首先,确保你已经安装了 Mongoose:

npm install mongoose

然后,创建一个简单的 Node.js 脚本来演示如何重命名字段:

const mongoose = require('mongoose');

// 连接到 MongoDB
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义一个 Food 模型
const FoodSchema = new mongoose.Schema({
    name: String,
    imgUrl: String,
    money: String,
    source: String,
    address: String,
    time: Date
});

const Food = mongoose.model('Food', FoodSchema);

// 查询数据并重命名字段
async function getFoods() {
    const foods = await Food.find({});
    
    // 处理结果并重命名字段
    const processedFoods = foods.map(food => ({
        name: food.name,
        imgUrl: food.imgUrl,
        money: food.money,
        source: food.source,
        address: food.address,
        mytime: food.time.getTime(),
        id: food._id.toString()
    }));
    
    console.log(processedFoods);
}

getFoods().catch(console.error);

解释

  1. 连接到 MongoDB:使用 mongoose.connect 方法连接到本地的 MongoDB 实例。
  2. 定义模型:使用 mongoose.Schema 定义一个 Food 模型,包括所需的字段。
  3. 查询数据:使用 Food.find({}) 查询所有 Food 文档。
  4. 处理结果:使用 map 方法遍历查询结果,并重命名字段:
    • time 字段重命名为 mytime,并将其转换为毫秒值。
    • _id 字段重命名为 id,并将其转换为字符串形式。

这样,你就可以在 Node.js 中轻松地处理 MongoDB 数据,并按需重命名字段。


类似sql的

select id as systemId from table1

各位大师帮帮忙啊

$rename 直接改字段名字。

$rename如何操作啊,我知道有这个不过好像是把mongodb库中的实际字段也修改了啊。 如何你的方法不会,那能不能提供一下代码谢谢了

初学mongodb,瞎出主意,勿怪,呵呵

你的方法蛮好的,但我想知道mongodb是否提供解决这样问题的方法

不过还是很谢谢你

这个需求还挺基本的,MongoDB应该有支持。

是啊,这个是很基本的东西,但一直找不到方法

就像我发的:http://cnodejs.org/topic/50d159b2637ffa4155becc28 我感觉也很基本,我也没找到方法,郁闷。

兄弟你那个是想实现什么功能

靠,api上都有,都没人研究api?

?? 兄弟你就直接放代码吧。

明确的告诉你:没有 如果想实现mysql的as功能,那么自己程序里模拟下吧,我就这么做的,把数据循环下然后修改key

db.Foods.findOne(function(err,rs){
    var data = {};
    if(rs){
        data = rs.toJSON();
        data.id = data._id;
        data.mytime = data.time
        try{
             delete data._id;
             delete data.time;
        }catch(e){

        }
    }
    res.send(data);

});

在使用 Node.js 和 MongoDB 时,MongoDB 查询本身并不直接支持字段重命名的功能。但是,我们可以通过查询结果后,在应用程序中手动进行字段重命名来实现这一点。

以下是一个简单的示例,展示如何使用 Node.js 和 MongoDB 的 mongoose 库来实现字段重命名:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });

const FoodSchema = new mongoose.Schema({
    name: String,
    imgUrl: String,
    money: String,
    source: String,
    address: String,
    time: Date,
});

const Food = mongoose.model('Food', FoodSchema);

async function getFood() {
    const food = await Food.findOne();
    if (!food) return;

    // 手动重命名字段
    const renamedFood = {
        ...food.toObject(), // 将 Mongoose 对象转换为普通对象
        id: food._id,       // 重命名 _id 为 id
        mytime: food.time,  // 重命名 time 为 mytime
        ...omit(food.toObject(), ['_id', 'time']), // 移除原始字段
    };

    console.log(renamedFood);
}

getFood();

在这个示例中,我们首先定义了一个 Food 模型,并使用 findOne() 方法查询文档。然后,我们将 _id 字段重命名为 id,将 time 字段重命名为 mytime。最后,我们使用 omit 函数移除了原始的 _idtime 字段。

注意:示例中的 omit 函数需要通过 lodash 或其他类似库引入,或者您也可以手动实现一个简单的 omit 函数。

回到顶部