MongoDB查询检查数组属性中是否有值

时间:2013-04-15 10:10:32

标签: mongodb querying

我无法找到如何检查,如果某些值在mongo文档中的数组属性中。 例如,我有一些收集用户,以及这样的文档:

{
  'name':'Paul',
  'age':43,
  'friendsIDs': [ ObjectId('qqq...'), ObjectId('www...'), ObjectId('eee...') ],
}

现在让我们假设我要检查,是否是ID对象ID('qqq ...')的用户是Paul的朋友。 这在几乎所有的编程语言中都很容易实现,例如在php中它可能是这样的:

$isFriendOfPaul = in_array( ObjectId('qqq...'), $friendsIds );

但是如何在mongo中查询?有什么想法吗?

3 个答案:

答案 0 :(得分:10)

实际上,{strong> $ in manual

答案 1 :(得分:1)

您的查询必须如下:

db.collection.find({"name": "Paul", "friendsIDs": "qqq"}) 

此查询查找名称为PaulfriendsIDs等于qqq的文档。

答案 2 :(得分:1)

这也可以使用$eq

完成
> db.person.insert({name: 'Paul', age: 43, friends: [1234, 2345, 3456]})
> db.person.insert({name: 'Dave', age: 23, friends: [2345, 3456]})
> db.person.insert({name: 'Stephen', age: 12, friends: [2345, 3456, 7890]})

以下是使用$ eq:

的示例
> db.person.find({friends: {$eq : 2345}}) 
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] }
{ "_id" : ObjectId("54e34138fe135475834334db"), "name" : "Dave", "age" : 23, "friends" : [ 2345, 3456 ] }
{ "_id" : ObjectId("54e3414bfe135475834334dc"), "name" : "Stephen", "age" : 12, "friends" : [ 2345, 3456, 7890 ] }

但下面的查询也会找到相同的内容。正如斯文所说,你可以省去$ eq。

> db.person.find({friends: 2345})
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] }
{ "_id" : ObjectId("54e34138fe135475834334db"), "name" : "Dave", "age" : 23, "friends" : [ 2345, 3456 ] }
{ "_id" : ObjectId("54e3414bfe135475834334dc"), "name" : "Stephen", "age" : 12, "friends" : [ 2345, 3456, 7890 ] }

> db.person.find({friends: 1234})
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] }