猫鼬查找具有限制的数组元素

时间:2018-10-01 20:03:43

标签: node.js mongodb mongoose

我正在使用https://mongoosejs.com/查询mongo

我想查找数组元素的数据。像这样:

var a = ["a","b","c"];
topic.find({topic:a}).limit(4).exec(.....

如果我这样使用,我只能找到 a 元素;但我完全需要这意味着:

  

a = 4的限制,b = 4的限制,c = 4的限制

在stackoverflow上,您提出一个问题,我们将回答该问题。也许一个答案可能是2可能是3,并且stackoverflow发送所有带有限制的答案注释。我想这样做。

2 个答案:

答案 0 :(得分:1)

您可以为此使用$facet,这将为您提供一个结果文档:

db.collection.aggregate({
    $facet: {
        "a": [{ $match: { "topic": "a" } }, { $limit: 4 }],
        "b": [{ $match: { "topic": "b" } }, { $limit: 4 }],
        "c": [{ $match: { "topic": "c" } }, { $limit: 4 }],
    }
})

如果您需要单独的文档,则可以在上述管道的末尾附加以下阶段:

{
    $project: {
        "result": { $concatArrays: [ "$a", "$b", "$c" ] }
    }
}, {
    $unwind: "$result"
}

答案 1 :(得分:0)

我认为这里的解决方案是将结果连接起来。

const aIds = topic.find({topic:"a"}).limit(4).map( el => el._id );
const bIds = topic.find({topic:"b"}).limit(4).map( el => el._id );
const cIds = topic.find({topic:"c"}).limit(4).map( el => el._id );
topic.find({_id: {$in: aIds.concat(bIds).concat(cIds) }}).exec(.....

不是最有效的,但是它将起作用。

更新

最初,我不知道这个问题与猫鼬有关。 我不熟悉,但想法仍然相同: 找到3个主题(a,b,c),每个主题都有自己的限制,然后加入它们。