当前位置:  开发笔记 > 编程语言 > 正文

mongodb/mongoose findMany - 查找在数组中列出ID的所有文档

如何解决《mongodb/mongoosefindMany-查找在数组中列出ID的所有文档》经验,为你挑选了2个好方法。

我有一个_ids数组,我想相应地获取所有文档,最好的方法是什么?

就像是 ...

// doesn't work ... of course ...

model.find({
    '_id' : [
        '4ed3ede8844f0f351100000c',
        '4ed3f117a844e0471100000d', 
        '4ed3f18132f50c491100000e'
    ]
}, function(err, docs){
    console.log(docs);
});

该数组可能包含数百个_id.



1> Daniel Mende..:

findmongoose中的函数是对mongoDB的完整查询.这意味着你可以使用方便的mongoDB $in子句,它就像它的SQL版本一样工作.

model.find({
    '_id': { $in: [
        mongoose.Types.ObjectId('4ed3ede8844f0f351100000c'),
        mongoose.Types.ObjectId('4ed3f117a844e0471100000d'), 
        mongoose.Types.ObjectId('4ed3f18132f50c491100000e')
    ]}
}, function(err, docs){
     console.log(docs);
});

即使对于包含数万个ID的数组,此方法也能正常工作.(请参阅有效确定记录的所有者)

我建议任何人mongoDB阅读优秀的官方mongoDB文档的高级查询部分


有点迟到这个讨论,但是你如何确保返回的项目的顺序与你在数组中提供的项目数组的顺序相匹配?除非您指定排序,否则不保证文档以任何顺序出现.如果您希望它们按照您在阵列中列出的顺序排序(例如... 000c,... 000d,... 000e),该怎么办?
由于某种原因,这不起作用.我得到了一个空数组的文档
@chovy首先尝试[将它们转换为ObjectIds](/sf/ask/17360801/),而不是传递字符串.

2> 小智..:

使用此格式的查询

let arr = _categories.map(ele => new mongoose.Types.ObjectId(ele.id));

Item.find({ vendorId: mongoose.Types.ObjectId(_vendorId) , status:'Active'})
  .where('category')
  .in(arr)
  .exec();

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有