Я думаю, что запрос, который используется в принятом ответе, может быть намного короче.
db.collection.aggregate([
{
$match: {
$or: [
{
"profession.organization": "bank",
"profession.city": {
$ne: "NY"
}
},
{
"profession.organization": {
$ne: "bank"
},
"profession.city": "NY"
}
]
}
},
{
$sample: {
size: 1
}
}
])
и еще одна вещь, которую я хочу сказать, - если вы также хотите включить документы, которые не имеют либо из этих двух свойств вы должны использовать это:
db.collection.aggregate([
{
$match: {
$or: [
{
"profession.organization": "bank",
"profession.city": {
$ne: "NY"
}
},
{
"profession.organization": {
$ne: "bank"
},
"profession.city": "NY"
},
{
"profession.organization": {
$ne: "bank"
},
"profession.city": {
$ne: "NY"
}
}
]
}
},
{
$sample: {
size: 1
}
}
])
это также будет включать документы, такие как -
{
"profession": {
"organization": "someBank",
"city": "notNA"
}
}