基于对象数组的 MongoDB 过滤器
MondoDB filter based on array of objects
我在集合中有这些类型的数据:
{
"_id": {
"$oid": "6014662b3a38ba4929b602ab"
},
"collection": [
{
"name": "Facility",
"_id": {
"$oid": "601466293a38ba4929b602aa"
},
"is_deleted": false
},
{
"name": "User",
"_id": {
"$oid": "60021529c02fa2b27e7c1989"
},
"is_deleted": false
},
{
"name": "Asset",
"_id": {
"$oid": "6018948fc35a109224439f73"
},
},
{
"name": "Asset",
"_id": {
"$oid": "604a734fca10c74d800031db"
},
"is_deleted": true
}
],
"customer": "TestCustomer",
"is_deleted": false
}
我也有这个问题
db.getCollection("Collection").aggregate([{
'$match': {
'$and': [{
'collection.name': 'User',
'collection._id': ObjectId('60021529c02fa2b27e7c1989'),
'collection.is_deleted': false
}, {
'collection.name': 'Asset',
'collection._id': ObjectId('604a734fca10c74d800031db'),
'collection.is_deleted': false
}],
'customer': 'TestCustomer',
'is_deleted': false
}
}])
is_deleted
on Asset
在数据库中为真,但我在请求时值为 false
。
执行此查询时,不应该 return 没有数据,但确实如此。我一直在努力解决这个问题,但到目前为止没有任何帮助。
因为您要匹配数组中的元素,所以您应该改用 $elemMatch
。也不需要 $and
运算符。
db.collection.aggregate([
{
"$match": {
"collection": {
"$elemMatch": {
"name": "User",
"_id": ObjectId("60021529c02fa2b27e7c1989"),
"is_deleted": false
}
},
"collection": {
"$elemMatch": {
"name": "Asset",
"_id": ObjectId("604a734fca10c74d800031db"),
"is_deleted": false
}
},
"customer": "TestCustomer",
"is_deleted": false
}
}
])
我在集合中有这些类型的数据:
{
"_id": {
"$oid": "6014662b3a38ba4929b602ab"
},
"collection": [
{
"name": "Facility",
"_id": {
"$oid": "601466293a38ba4929b602aa"
},
"is_deleted": false
},
{
"name": "User",
"_id": {
"$oid": "60021529c02fa2b27e7c1989"
},
"is_deleted": false
},
{
"name": "Asset",
"_id": {
"$oid": "6018948fc35a109224439f73"
},
},
{
"name": "Asset",
"_id": {
"$oid": "604a734fca10c74d800031db"
},
"is_deleted": true
}
],
"customer": "TestCustomer",
"is_deleted": false
}
我也有这个问题
db.getCollection("Collection").aggregate([{
'$match': {
'$and': [{
'collection.name': 'User',
'collection._id': ObjectId('60021529c02fa2b27e7c1989'),
'collection.is_deleted': false
}, {
'collection.name': 'Asset',
'collection._id': ObjectId('604a734fca10c74d800031db'),
'collection.is_deleted': false
}],
'customer': 'TestCustomer',
'is_deleted': false
}
}])
is_deleted
on Asset
在数据库中为真,但我在请求时值为 false
。
执行此查询时,不应该 return 没有数据,但确实如此。我一直在努力解决这个问题,但到目前为止没有任何帮助。
因为您要匹配数组中的元素,所以您应该改用 $elemMatch
。也不需要 $and
运算符。
db.collection.aggregate([
{
"$match": {
"collection": {
"$elemMatch": {
"name": "User",
"_id": ObjectId("60021529c02fa2b27e7c1989"),
"is_deleted": false
}
},
"collection": {
"$elemMatch": {
"name": "Asset",
"_id": ObjectId("604a734fca10c74d800031db"),
"is_deleted": false
}
},
"customer": "TestCustomer",
"is_deleted": false
}
}
])