可以在 mongo db 中像在 SQL 中一样选择集合的文档:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
或者如果我有一个_id array
我必须一一选择然后重新组合array/object
结果?
可以在 mongo db 中像在 SQL 中一样选择集合的文档:
SELECT * FROM collection WHERE _id IN (1,2,3,4);
或者如果我有一个_id array
我必须一一选择然后重新组合array/object
结果?
简单 :)
db.collection.find( { _id : { $in : [1,2,3,4] } } );
取自:http : //www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24in
因为mongodb 使用bson
and for bson 是重要的属性类型。因为_id
是ObjectId
你必须使用这样的:
db.collection.find( { _id : { $in : [ObjectId('1'),ObjectId('2')] } } );
并mongodb compass
像这样使用:
{ "_id" : { $in : [ObjectId('1'),ObjectId('2')] } }
注意:字符串中的 objectId 有24
长度。
你可以试试这个
var ids = ["5883d387971bb840b7399130","5883d389971bb840b7399131","5883d38a971bb840b7399132"];
var oids = [];
ids.forEach(function(item){
oids.push(new ObjectId(item));
});
.find({ _id: {$in : oids}})
如果您想按用户以及有条件地按另一个字段查找,您可以使用扩展和三元运算符轻松地像下面那样使用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),
},
},