我正在使用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发送所有带有限制的答案注释。我想这样做。
答案 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),每个主题都有自己的限制,然后加入它们。