3

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

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

现在假设我要检查,ID 为 ObjectId('qqq...') 的用户是否是 Paul 的朋友。这在几乎所有编程语言中都很容易做到,例如在 php 中它会是这样的:

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

但是如何在 mongo 中查询呢?有任何想法吗?

4

3 回答 3

18

实际上,它在手册中是$

于 2013-04-15T11:20:42.073 回答
3

您的查询必须是这样的:

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

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

于 2013-04-15T10:23:33.183 回答
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 ] }

但下面的查询也发现相同。因此,正如 Sven 所建议的,您可以省略 $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 ] }
于 2015-02-17T13:40:08.877 回答