在猫鼬中查找 ID 数组
Posted
技术标签:
【中文标题】在猫鼬中查找 ID 数组【英文标题】:Find with array of IDs in mongoose 【发布时间】:2020-09-12 01:13:30 【问题描述】:我用 Express.js 和猫鼬制作了一个 API。 我需要找到 id 包含在数组中的用户。
// the array of ids
const followedIds = follow.map((f) => f.followed);
console.log(followedIds);
// return [ '5ebaf673991fc602045ed47f', '5ebc6fb9af8add09edd842e9' ]
此数组中的所有 ID 都存在。
然后我做:
User.where('_id').in(followedIds).exec()
.then((followedUser) =>
console.log('followedUser', followedUser);
// return []
);
followedUser
应该有两个具有匹配 id 的用户对象。
我该如何解决这个问题?
谢谢
PS:这里有我的用户模型
const mongoose = require('mongoose');
const user = new mongoose.Schema(
username: type: String, required: true ,
email: type: String, required: true ,
password: type: String, required: true ,
avatar: type: String, default: '/images/avatar_default.jpg' ,
banner: type: String, default: '/images/banner_default.jpg' ,
created_at: type: Date, required: true ,
deleted_at: type: Date, required: false ,
, versionKey: false );
module.exports = mongoose.model('user', user);
【问题讨论】:
【参考方案1】:.in
类似方法
User.find().where('_id').in(followedIds)
【讨论】:
【参考方案2】:您可以使用$in operator 并向mongo 提供一组ID。例如。您可以从数组中查询具有指定 ID 的用户:
const followedUsers = await User.find( _id: $in: followedIDs );
console.log(followedUsers);
但是,请确保您的 followedIDs
是 ObjectId
的数组。 MongoDB 将_id
存储为ObjectId
,而不是字符串。
db.inventory.insertMany([
item: "journal", qty: 25, status: "A" ,
item: "notebook", qty: 50, status: "A" ,
item: "paper", qty: 100, status: "D" ,
item: "planner", qty: 75, status: "D" ,
item: "postcard", qty: 45, status: "A"
]);
db.inventory.find( _id: $in: [ObjectId("your_id_here")] );
要从字符串数组生成这样的数组,请使用map
:
const followedIDs = yourArrayWithIDAsString.map(ObjectId);
【讨论】:
以上是关于在猫鼬中查找 ID 数组的主要内容,如果未能解决你的问题,请参考以下文章