【问题标题】:How to write MongoDb Mongoose query to match two attributes如何编写 MongoDb Mongoose 查询以匹配两个属性
【发布时间】:2020-03-24 23:28:48
【问题描述】:

我的库存模型文件看起来像这样:

const Stock = new Schema(
    {
        ClientId : {type : Schema.ObjectId},
        ClientName : {type : String}, 
        StockName : { type : String },
        StockType : { type : String },      
        ConsumedQuantity : {type : Number},
        TotalQuantity : {type : Number},
        WastageQuantity : {type : Number}, 

     },
    { timestamps: true },
);

还有一个来自我的库存控制器的查询:

Stock.findOne({ ClientId : clientId }, (err, stock) => {


        if (err) {
            return res.status(404).json({
                err,
                message: 'Stock not found!',
            })
        }

        if( stock.ConsumedQuantity === undefined)
            stock.ConsumedQuantity = materialConsumed

        else
            stock.ConsumedQuantity += materialConsumed


        if( stock.WastageQuantity === undefined)
            stock.WastageQuantity = materialWasted

        else
            stock.WastageQuantity += materialWasted

        stock
            .save()
            .then(() => {

                return res.status(200).json({
                    success: true,
                    message: 'Material in inventory has been updated!',

                })
            })
            .catch(error => {

                return res.status(404).json({
                    error,
                    message: 'Material in inventory was not updated!',
                })
            })



    })

我希望能够根据两个条件查询我的库存商品,首先是 ClientId 等于 clientId,这是我从服务器请求中获得的值。其次,我希望 stockItem 的名称与字符串匹配。我该怎么做呢?是否有一个 AND 运算符可以用来在同一个查询中执行 ClientId : clientId 和 StockName : stockName ?请帮忙!谢谢你。

【问题讨论】:

    标签: mongodb mongoose mongodb-query mongoose-schema


    【解决方案1】:
    Stock.findOne({ ClientId : clientId, StockName : yourString }, (err, stock) => {
        if (err) {
            return res.status(404).json({
                err,
                message: 'Stock not found!',
            })
        }
    
        if( stock.ConsumedQuantity === undefined)
            stock.ConsumedQuantity = materialConsumed
    
        else
            stock.ConsumedQuantity += materialConsumed
    
    
        if( stock.WastageQuantity === undefined)
            stock.WastageQuantity = materialWasted
    
        else
            stock.WastageQuantity += materialWasted
    
        stock
            .save()
            .then(() => {
    
                return res.status(200).json({
                    success: true,
                    message: 'Material in inventory has been updated!',
    
                })
            })
            .catch(error => {
    
                return res.status(404).json({
                    error,
                    message: 'Material in inventory was not updated!',
                })
            })
    })
    

    【讨论】:

    • 简单地在 where 子句中添加第二个属性 with ,它作为 AND 运算符工作,如果你想要 or 运算符,然后使用这个语法 {$or:[{region: "NA"},{sector: "某个部门"}]}
    猜你喜欢
    • 2011-01-01
    • 2021-09-27
    • 2020-06-09
    • 1970-01-01
    • 2021-10-23
    • 2020-05-31
    • 2016-09-21
    • 2019-05-06
    • 1970-01-01
    相关资源
    最近更新 更多