我試圖獲得具有isDraft值true的物件,但我也得到了具有isDraft值false的物件。我只需要有isDraft值的物件true 我是Node Js的新手。我已經嘗試了所有可能的方法,但無法找到解決這個問題的辦法。誰能幫我解決這個問題呢?
下面是模式,查詢和回應
模式
模式
const mongoose = require('mongoose'/span>) 。
const Schema = mongoose.Schema;
const Contract = new Schema( {
name: {
type: String,
unqiue: true,
required: true。
},
version: [
{
no: {
type: Number,
required: true。
},
sections: [
{
sectionName: {
type: String,
required: true。
},
clause: [{
description: {
type: String,
required: true。
},
}]
}
],
approvedBy: [
{
user: {
type: Schema.Types.ObjectId。
ref。'user'。
},
}
],
acceptedBy: [
{
name: {
type: String,
},
eamil: {
type: String,
},
}
],
isDraft: {
type: Boolean。
required: true。
},
date: {
type: Date,
default: Date.now。
}
}
],
createdBy: {
type: Schema.Types.ObjectId。
ref。'user'。
required: true。
},
});
module.exports = mongoose.model('contract', Contract) 。
Query
query = {
$and: [
{ createdBy: clientAdminDetails._id },
{ "version.isDraft": true }。
],
};
await Contract
.find(query)
.skip(req.body.noOfItems * (req. body.pageNumber - 1)
.limit(req.body.noOfItems)
.exec((err, contract) =>/span> {
if (err) {
return res.json(err)。
}
Contract.countDocuments(query)。 exec((count_error, count) => {
if (err) {
return res.json(count_error)。
}
return res.json({}.
total: count,
page: req.body.pageNumber,
pageSize: contract.length,
contracts: contract.
});
});
});
回應
{
"total": 1,
"page": 1,
"pageSize": 1,
"合同": [
{
"_id": "61449469775..",
"name": "Octavia Blankenship"。
"版本": [
{
"_id": "614496593cc..",
"section": [
{
"_id": "61449469775..",
"sectionName": "Est dolore dolorem n Updated `1323"。
"clause": [
{
"_id": "614494697..",
"description": "Numquam nostrud et a", "description": "Numquam nostrud et a"
}
]
}
],
"isDraft"/span>: false,
"no": 1,
"approvedBy": [],
"acceptBy": [],
"date": "2021-09-17T13:21:29.509Z"
},
{
"_id": "614496122904ee4e046fbee8",
"section": [
{
"_id": "6144955a8c0061025499606f",
"sectionName": "Praesentium suscipit",
"條款": [
{
"_id": "6144955a8c00610254996070",
"description": "Velit aperiam ut vel"。
}
]
}
],
"isDraft": true,
"no": 2,
"approvedBy": [],
"acceptBy": [],
"date": "2021-09-17T13:20:18.128Z"
}
],
"createdBy": "614367e980b29e6c...",
"__v": 0.
}
]
}
uj5u.com熱心網友回復:
這就是為什么使用你的查詢,你告訴mongo "給我一個檔案,其中createdBy是想要的id,并且version.isdraft是真的",所以,由于DOCUMENT包含這兩個值,所以被回傳,甚至現有的false進入陣列。
要解決這個問題,你有很多方法。
第一種是使用$elemMatch進入投影(docs here)。但是使用這種方式只能回傳第一個元素,所以我認為你更喜歡其他方式。
所以你可以使用$filter這樣的聚合查詢:
- 首先
$match通過你想要的值(如你的查詢)。 - 然后覆寫
version陣列過濾,其中isDraft = true.
db.collection.aggregate( [
{
"$match"/span>: {
"createdBy": "",
"version.isDraft": true。
}
},
{
"$set": {
"version": {
"$filter": {
"input": "$version",
"as": "v",
"cond": {
"$eq": [
"$v.isDraft",
true
示例 這里
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/319818.html
標籤:
