Вам нужно $ expr , чтобы сравнить два поля в MongoDB.Поскольку у вас есть массив (collection
), и вы хотите проверить, есть ли какой-либо элемент, с которым совпадают поля, вы можете использовать $ map с $ anyElementTrue операторами, как показано ниже:
db.col.find({
$expr: {
$anyElementTrue: {
$map: {
input: "$collections",
in: {
$eq: [ "$$this.collection_code", "$attributes.collection_code" ]
}
}
}
}
})
Существует также более лаконичный способ, используя $ в операторе
db.col.find({
$expr: {
$in: [ "$attributes.collection_code", "$collections.collection_code" ]
}
})
, это работает, потому что collections.collection_code
представляет массив строк в этом случае.
РЕДАКТИРОВАТЬ: В качестве обходного пути для версии 3.0 вы можете использовать $anyElementTrue
с $ redact :
db.col.aggregate([
{ $redact: {
$cond: {
if: {$anyElementTrue: { $map: { input: "$collections", as: "c", in: { $eq: [ "$$c.collection_code", "$attributes.collection_code" ] } }}},
then: "$$KEEP",
else: "$$PRUNE"
}
}
}
])