2015-12-10 73 views
0

查找元素我有一个简单的数组在我的MongoDB集合:MongoDB的:在一个阵列

"_id": "5669b4930874f8d01f7676da", "cars": ["BMW", "Audi", "VW"] 

我现在要检查,如果“奥迪”是文件内。我已经在SO上读过关于数组的所有问题,但他们都将注意力集中在内部的对象上,这里不是这种情况。

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版进行测试。谢谢你的帮助!

回答

1

可以简化:

db.collectionName.find({ cars: "Audi" }) 

应该很好地工作。

db.collectionName.find({ cars: { $in: ["Audi"] }}) 

也可以工作,但首先是更简单。

+0

这是我的问题是愚蠢的。我实际上创建了这个汽车的例子,但在我的集合中,我用的是(在这里使用相同的例子)搜索“福特”,这显然不在数组中,因此我得到了0个文档。谢谢,花了30分钟试图弄清楚为什么你的工作和我的不是。 – a4xrbj1

+1

啊,它发生;-) –

0

此查询似乎为我工作:

db.cars.find({cars: {$elemMatch:{$eq:"BMW"}} }) 

结果

{ "_id" : ObjectId("5669ca2ff0fbefa0650e5fb6"), "cars" : [ "Audi","BMW", "Honda" ] }