NodeJS API:通过“Id”属性将文档查找到集合中,而不是通过 Mongodb 中的“_id”默认值

Posted

技术标签:

【中文标题】NodeJS API:通过“Id”属性将文档查找到集合中,而不是通过 Mongodb 中的“_id”默认值【英文标题】:NodeJS API: Find a document into a collection by "Id" property , not by "_id" default in Mongodb 【发布时间】:2019-11-15 17:09:21 【问题描述】:

我想在我的模式中通过属性“id”检索文档,而不是使用 Mongodb 的默认值“_id”。

当我提出这样的要求时,我希望得到回应: https://sample-accounts-api.herokuapp.com/accounts/2


        attributes: 
          id: 2,
          user_id: 2,
          name: "Bカード",
          balance: 200
        
      

这是我的帐户模型:

var AccountSchema = new mongoose.Schema(
        id: type: Number,
        user_id: type: Number, ref: 'User',
        name: String,
        balance: Number
);

这是我的控制器 API:

const Account = require('../model/account');
exports.findOne = (req,res) => 
    Account
    .findById(???)
    .then(account => 
        if(!account) 
            return res.status(404).send(
                message: "Account not found with ID " 
            );
        
        res.send(account);
    )
    .catch(err => 
        return res.status(505).send(
            message: "Something wrong retrieving account with Id "
        );
    )

【问题讨论】:

【参考方案1】:
    exports.findOne = (req,res) => 
    Account
    .findOne('attributes.id':req.params.id)
    .then(account => 
        if(!account) 
            return res.status(404).send(
                message: "Account not found with ID " 
            );
        
        res.send(account);
    )
    .catch(err => 
        return res.status(505).send(
            message: "Something wrong retrieving account with Id "
        );
    )

使用attributes.id 并将其映射到您的req.params.id

【讨论】:

【参考方案2】:

我解决了这个问题。

我的代码:

const Account = require('../model/account');

exports.findOne = (req,res) => 
Account
// Find a Account by "id" property and except the "_id" & "__v" field
.findOne(id:req.param("id"), _id: 0, __v: 0) 
.then(account => 
    if(!account) 
        return res.status(404).send(
            message: "Account not found with ID " 
        );
    
    res.send('attributes':account);
)
.catch(err => 
    return res.status(505).send(
        message: "Something wrong retrieving account with Id "
    );
)

【讨论】:

以上是关于NodeJS API:通过“Id”属性将文档查找到集合中,而不是通过 Mongodb 中的“_id”默认值的主要内容,如果未能解决你的问题,请参考以下文章

DOM基础及事件基础

DOM 常用操作之“查找”

WebDriver API 元素定位

Qt QAxObject - 在 querySubObject 和 Cell 属性上查找 Excell API/SDK 文档

Mongoose - 检索到的文档中没有“_id”属性

通过猫鼬中的两个值查找数据