我的MongoDB集合中有一个简单的数组:
"_id": "5669b4930874f8d01f7676da", "cars": ["BMW", "Audi", "VW"]
我现在想检查“奥迪”是否在该文件中。我在这里阅读了关于数组的所有问题,但是他们全都关注内部对象的数组,这不是这里的情况。
db.collectionName.find({ cars: {$eq: "Audi"} })
不起作用(它不返回任何文件)。
编辑:这是我自己的愚蠢,请参阅下面关于最佳解决方案的评论。因此上述查询始终正在运行。好吧,因为他们说问题总是在键盘前面; - )也不是:
db.collectionName.find({ $elemMatch: { cars: "Audi" }})
它实际上会导致以下错误消息:
error: {
"$err" : "Can't canonicalize query: BadValue unknown top level operator: $elemMatch",
"code" : 17287
或:
db.collectionName.find({ cars: { $in: "Audi" }})
这会导致以下错误:
error: {
"$err" : "Can't canonicalize query: BadValue $in needs an array",
"code" : 17287
通过MongoDB shell测试MongoDB版本2.6.7。谢谢你的帮助!
答案 0 :(得分:1)
你可以简化:
db.collectionName.find({ cars: "Audi" })
应该完美无缺。
db.collectionName.find({ cars: { $in: ["Audi"] }})
也可以工作,但首先更简单。
答案 1 :(得分:0)
这个查询似乎对我有用:
db.cars.find({cars: {$elemMatch:{$eq:"BMW"}} })
结果
{ "_id" : ObjectId("5669ca2ff0fbefa0650e5fb6"), "cars" : [ "Audi","BMW", "Honda" ] }