You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose如何查询数组包含指定_id的文档?查询返回空如何解决?

问题根因

你当前写的查询语句likedPosts: ['222222222222']的语义是精确匹配整个likedPosts数组,只有当某个用户的likedPosts数组仅包含222222222222这一个元素、且元素顺序完全一致时才会命中,和你要查询「数组包含指定元素」的需求不符,因此返回空数组。

正确查询写法

1. 匹配数组包含单个指定元素

两种等价写法均可实现需求:

  • 直接传目标值,MongoDB会自动匹配数组中包含该值的文档:
const usersWhoLikePost2 = UserModel.find({
    likedPosts: '222222222222'
});
  • 使用$in操作符,适合后续需要扩展匹配多个可选值的场景:
// 可匹配点赞了222222222222或者333333333333的用户
const usersWhoLikePosts = UserModel.find({
    likedPosts: { $in: ['222222222222', '333333333333'] }
});

2. 匹配数组同时包含多个指定元素

如果需要查询同时点赞了多个帖子的用户,使用$all操作符:

// 匹配同时点赞了222222222222和333333333333的用户
const usersWhoLikeBothPosts = UserModel.find({
    likedPosts: { $all: ['222222222222', '333333333333'] }
});

额外注意事项

如果你的likedPosts字段存储的是MongoDB原生ObjectId类型而非字符串,查询前需要先把目标值转换为ObjectId类型,否则类型不匹配也会查询为空:

const mongoose = require('mongoose');
const targetPostId = mongoose.Types.ObjectId('222222222222');
const usersWhoLikePost2 = UserModel.find({
    likedPosts: targetPostId
});

内容的提问来源于stack exchange,提问作者TJBlackman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:45:03