【发布时间】:2012-09-17 14:56:38
【问题描述】:
我有以下 MongoDB 文档:
{
_id: ObjectId(5),
items: [1,2,3,45,4,67,9,4]
}
我需要获取包含过滤项 (1、9、4) 的文档
结果:
{
_id: ObjectId(5),
items: [1,9,4]
}
我尝试了 $elemMatch 投影,但它只返回一个项目:
A.findById(ObjectId(5))
.select({ items: { $elemMatch: {$in: [1, 9, 4]}}})
.exec(function (err, docs) {
console.log(doc); // { _id: ObjectId(5), items: [ 1 ] }
done(err);
});
我如何才能获得包含项目的文档:仅 1、9、4?
【问题讨论】:
-
@dnickless 这与您标记的潜在重复问题并不完全相同。这个示例文档有一个简单的数值数组,而另一个问题有一个对象数组。 MongoDB 中肯定有更多可用的聚合选项,但如果你想指出这一点,你应该添加作为评论而不是编辑旧答案。 2012 年最后更新的任何答案都隐含地描述了当时可用的选项:)。我已经更新了我的答案,包括一些更现代的运营商的例子。
-
@Stennie:点了。请注意,我并没有试图以任何方式减少您的答案,而是避免重复描述我认为普通 MongoDB 用户应该能够从一大堆其他技术中抽象出来的技术(非常相似但不可否认不完全相同)示例,并且还可以防止用户遵循您在 6 年前建议的旧样式模式(这是正确的),因为现在这样做会不必要地缓慢。所以请接受我的道歉。
-
@dnickless 不用担心 :)。如果更新可能合适,我建议对旧答案发表评论。在过去的 6 年中发生了很大变化,因此许多旧答案不再适用或可以使用刷新。标记的可能重复问题甚至更早(2010 年),也可以使用更新的答案。
标签: node.js mongodb express mongoose