我有一个相当复杂的文档,但这里是我可以把它放在这里的样本。
我有地址'具有多个地址文档的数组,如
addresses : [
{'code': '1', line:'abc town'}, {'code':'2', line:'bcd town'},{'code':'3', line: 'another town'}
我想根据代码提取文档。例如代码:1然后只是拉这个文件,如果没有看是否有代码:2,是的然后拉这个文件,否则拉其他任何可用的
我的文档结构如下所示
[
_id:123
fn: 'name',
addresses : [
{'code': '1', line:'abc town'}, {'code':'2', line:'bcd town'},{'code':'3', line: 'another town'}
]
我写的查询是
db.collection.aggregate([{$match: {'_id':123}},
{$project: {
"fn" :1,
"addresses": {$filter: {
input: '$addresses',
as: 'address',
cond: {$eq: ['$$address.code', '1']}
}},
_id: 0
}}
当代码等于1(显然)时它可以工作但是我不知道怎么做" if else"条件我需要我上面解释的方式,如果代码== 1然后只拉动该文件,如果没有看代码== 2然后拉那个文件,如果不是所有其他拉动任何可用的。
我知道解释起来很复杂,但我认为我的$ filter cond需要一些修复。
任何帮助将不胜感激
答案 0 :(得分:0)
我不知道这是否有效,我也不知道你想要做什么比较。如果你给我这些信息,我将重新创建数据集并在我的最后尝试。
db.collection.aggregate([{$match: {'_id':123}},
{$project: {
"fn" :1,
"addresses": {$cond: {
if: {$eq: ["YOUR_EXPRESSION": 1]},
then: "addresses.0.line",
else: "addresses.1.line"
}},
_id: 0
}}