【发布时间】:2011-12-04 12:42:39
【问题描述】:
在 mongo db 中可以像在 SQL 中一样选择集合的文档:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
或者如果我有一个_id array,我必须一一选择,然后重新组合结果的array/object?
【问题讨论】:
标签: javascript arrays node.js mongodb express
在 mongo db 中可以像在 SQL 中一样选择集合的文档:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
或者如果我有一个_id array,我必须一一选择,然后重新组合结果的array/object?
【问题讨论】:
标签: javascript arrays node.js mongodb express
简单:)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
取自:http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
【讨论】:
O(log(n) * m),其中n是集合的大小,m是传递的id数量吗?
因为 mongodb 使用 bson 而对于 bson 来说是重要的属性类型。因为_id 是ObjectId 你必须这样使用:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
在mongodb compass 中这样使用:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
注意: 字符串中的 objectId 的长度为 24。
【讨论】:
如果您想按用户和其他字段(例如有条件地)查找,您可以使用 aggregate 和 match 使用展开和三元运算符轻松完成,如下所示
const p_id = patient_id;
let fetchingReports = await Reports.aggregate([
...(p_id
? [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
patient_id: p_id,
},
},
]
: [
{
$match: {
createdBy: mongoose.Types.ObjectId(id),
},
},
【讨论】:
你可以试试这个
var ids = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"];
var oids = [];
ids.forEach(function(item){
oids.push(new ObjectId(item));
});
.find({ _id: {$in : oids}})
【讨论】: