【问题标题】:MongoDB query check if value in array property [duplicate]MongoDB查询检查数组属性中的值[重复]
【发布时间】:2013-04-07 09:56:06
【问题描述】:

我不知道如何检查,如果某些值在 mongo 文档的数组属性中。 比如我有一些收藏用户,和这样的文档:

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

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

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

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

【问题讨论】:

    标签: mongodb querying


    【解决方案1】:

    其实是$inmanual

    【讨论】:

    • 请告诉我查询。使用 $in 进行查询则相反。
    • "如果该字段包含一个数组,则 $in 运算符选择其字段包含一个数组的文档,该数组包含至少一个与指定数组中的值匹配的元素(例如 、 等)”——所以它应该双向工作。所以我想你可以尝试得到它:db.collection.find({friendsIDs: {$in: [YourIDValue]}})
    • 非常感谢,我试试!
    【解决方案2】:

    您的查询必须是这样的:

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

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

    【讨论】:

    【解决方案3】:

    这也可以通过$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 ] }
    

    【讨论】:

      猜你喜欢
      • 2018-12-11
      • 2021-09-27
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多