MongoDB如何实现条件判断并返回布尔字段的查询?
Absolutely feasible! You don’t need to mess with client-side JS calculations here—MongoDB’s aggregation framework lets you compute and add this boolean field directly on the database side, so you get pre-processed data right out of the query.
Here’s how to implement it:
Basic Implementation
Use the $addFields aggregation stage to create your new xIsGreaterThanY field, and the $gt comparison operator to check if field x is greater than field y. The $ prefix tells MongoDB to reference the value of an existing document field.
db.yourCollectionName.aggregate([ { $addFields: { xIsGreaterThanY: { $gt: ["$x", "$y"] } } } ])
Example Output
If your original document looks like this:
{ randomData: 123456, moreRandom: "abcdefg", x: 15, y: 10 }
The query will return:
{ randomData: 123456, moreRandom: "abcdefg", x: 15, y: 10, xIsGreaterThanY: true }
Handle Missing Fields (Optional)
If there’s a chance x or y might be missing in some documents, use $ifNull to set default values for the comparison (e.g., treat missing values as 0):
db.yourCollectionName.aggregate([ { $addFields: { xIsGreaterThanY: { $gt: [ { $ifNull: ["$x", 0] }, // Default to 0 if x doesn't exist { $ifNull: ["$y", 0] } // Default to 0 if y doesn't exist ] } } } ])
Return Only Specific Fields (Optional)
If you don’t want to include the original x and y fields in the result, use $project instead of $addFields to explicitly define which fields to keep, plus your new computed field:
db.yourCollectionName.aggregate([ { $project: { randomData: 1, moreRandom: 1, xIsGreaterThanY: { $gt: ["$x", "$y"] } } } ])
This will return exactly the format you shared:
{ xIsGreaterThanY: true, randomData: 123456, moreRandom: "abcdefg" }
All of this logic runs directly on the MongoDB server, so your client just gets the final, pre-processed data without any extra work.
内容的提问来源于stack exchange,提问作者bork

