我有包含tags个数组的文档.我想在网站上提供基于标签的建议,所以我需要获得包含相同标签的文档+与1个标签不匹配的文档+与2个标签不匹配的文档,等等...

我该怎么做?

推荐答案

示例集合:

db.tags.insert({"tags":["red", "tall", "cheap"]});
db.tags.insert({"tags":["blue", "tall", "expensive"]});
db.tags.insert({"tags":["blue", "little", "cheap"]}); 

找到所有包含"蓝色"标签的内容

db.tags.find({tags: { $elemMatch: { $eq: "blue" } }})

找到所有标记为"蓝色"且仅为蓝色的

db.tags.find({tags: "blue"})

找到所有标记为"蓝色"和"便宜"的

db.tags.find({ tags: { $all: ["cheap", "blue"] } } )

找到所有不是"蓝色"

db.tags.find({tags: { $ne: "blue" } })

找到所有的"蓝色"和"便宜",但不是"红色"和"高"

在我的mongo db中不可能.从mongodb 1.9.1开始,类似的功能应该可以使用,不过(未经测试):

db.tags.find({ $and: [ {tags: { $all: ["blue", "cheap"] } }, { tags: { $nin: ["red", "tall"] } } ] })

Mongodb相关问答推荐

如何在MongoDB中正确解析佛年?

如何填充Mongoose中的嵌套引用

优化游戏应用程序的反馈表单后端设计

从 kubectl exec 获取返回值到 powershell 脚本

有没有办法在 Prisma for MongoDB 的模式中显式声明 int32?

mongodb:多键索引 struct ?

MongoDB 列表 - 获取每第 N 个元素

mongoose默认值等于其他值

.insertOne 不是函数

MongoDB 的 Java 语法

使用模拟 MongoDB 服务器进行单元测试

Mongo:统计一组文档中单词出现的次数

Golang/mgo:如何让 MongoDB 在字段中使用当前时间?

mongodb无法启动

在 mongodb 中查找字段的所有非不同值

如何在mongoose中加入两个集合

MongoDb:如何将附加对象插入对象集合?

MongoDB MapReduce - 发出一个键/一个值不调用reduce

如何在 $match 内的 mongodb 聚合查询中使用 $regex

Mongodb 查找除一两个条件之外的所有内容