Можно ли иметь несколько запросов на одну коллекцию в одной функции в mongodb, используя node.js? - PullRequest
0 голосов
/ 15 апреля 2020
const maincount = await User.find({ isaccepted: 'false' }, { id: 1 })
            .sort({ _id: 1 })
            .limit(1)
            .catch(err => console.log(err))
const urcount = await User.findOne({ name: 'prajakta' }, { id: 1 }).catch(err => console.log(err))
res.send({ $subtract: [ urcount.id, maincount.id ] })

Как вычесть значения maincount и urcount?

Ответы [ 3 ]

0 голосов
/ 15 апреля 2020

Вы можете следовать этому коду

let doc=await User.find({
  $and:[
    {
     name: 'prajakta'
    },
    {
      accepted: 'false'
     },
     {
       id: 1 
     }
]
})
0 голосов
/ 15 апреля 2020

Вы можете найти $facet полезным для этого в структуре агрегации. Эти два аспекта будут содержать результаты двух запросов, и затем вы сможете выполнить вычитание на более поздних этапах агрегатного конвейера.

Возьмем, к примеру, следующий подход:

const pipeline = [
    { '$facet': {
        'maincount': [
            { '$match': { isaccepted: 'false' } },
            { '$sort': { '_id': 1 } },
            { '$limit': 1 }
        ],
        'urcount': [
            { '$match': { name: 'prajakta' } },
            { '$limit': 1 }
        ]
    } },
    { '$project': { 
        'diff': {
            '$subtract': [
                { '$arrayElemAt': ['$urcount.id', 0] },
                { '$arrayElemAt': ['$maincount.id', 0] }
            ]
        }
    } }
]

const result = await User.aggregate(pipeline).exec()
console.log(result[0])
0 голосов
/ 15 апреля 2020

Просто объедините условия.

try {
   await User.find({ name: 'prajakta', accepted: 'false' }, { id: 1 })
      .sort(...)
      .limit(...)
} catch (e) {
   // TODO: error handling...
}
...