mong判断subOrderList列表的某个对象存在goodsRemark 字段不为空语法?
在MongoDB中,判断subOrderList列表中某个对象的goodsRemark字段不为空,有以下几种写法:
1. 判断字段存在且不为null
JAVASCRIPT
// 使用 $exists 和 $ne
db.collection.find({
"subOrderList": {
"$elemMatch": {
"goodsRemark": { "$exists": true, "$ne": null }
}
}
})
2. 判断字段存在且不为null和空字符串
JAVASCRIPT
// 如果还排除空字符串
db.collection.find({
"subOrderList": {
"$elemMatch": {
"goodsRemark": {
"$exists": true,
"$ne": null,
"$ne": "" // 可选,排除空字符串
}
}
}
})
3. 使用聚合管道判断
JAVASCRIPT
// 使用聚合管道
db.collection.aggregate([
{
$match: {
"subOrderList": {
$elemMatch: {
"goodsRemark": { $exists: true, $ne: null }
}
}
}
}
])
4. 在聚合中筛选包含该字段的文档
JAVASCRIPT
// 返回时只显示符合条件的数组元素
db.collection.aggregate([
{
$match: {
"subOrderList.goodsRemark": { $exists: true, $ne: null }
}
},
{
$project: {
"filteredSubOrders": {
$filter: {
input: "$subOrderList",
as: "order",
cond: {
$and: [
{ $ne: ["$$order.goodsRemark", null] },
{ $ne: ["$$order.goodsRemark", ""] } // 可选
]
}
}
}
}
}
])
5. 简洁写法(适用于简单查询)
JAVASCRIPT
// 如果只判断不为null
db.collection.find({ "subOrderList.goodsRemark": { $ne: null } })
// 如果同时排除null和空字符串
db.collection.find({
"subOrderList.goodsRemark": {
$nin: [null, ""] // 排除null和空字符串
}
})
示例数据
JAVASCRIPT
// 示例数据
{
"_id": 1,
"subOrderList": [
{ "orderId": "A1", "goodsRemark": "备注信息" }, // 符合条件
{ "orderId": "A2", "goodsRemark": null }, // 不符合
{ "orderId": "A3" } // 不符合(字段不存在)
]
}
{
"_id": 2,
"subOrderList": [
{ "orderId": "B1", "goodsRemark": "" }, // 不符合(空字符串)
{ "orderId": "B2" } // 不符合
]
}
使用建议
- 如果只是简单判断是否存在且不为
null,使用第5种的简洁写法 - 如果需要更复杂的判断条件,使用
$elemMatch - 如果要在结果中过滤数组,使用聚合管道
- 注意区分
null、""(空字符串)和字段不存在的区别