MongoDB中如何判断一个元素是否在文档的数组中

自在山 发布于 2011/08/24 13:34
阅读 4K+
收藏 0

MongoDB中如何判断一个元素是否在文档的数组中,举个例子:下面的用户文档,有一条“friendList”的数组,保存用户的好友ID号,现在要判断任意用户ID是否在其中,有没有相关的函数?有没有和redis中的类似SISMEMBER的函数?是否只有要遍历一遍?期待各位老大指点!

{

   "_id" : ObjectId ( "4de30eaa12c9c5d5baecae75" ),
   "addFriend" : "Confirm",
   "createTime" : "Mon, 30 May 2011 03: 27: 38 +0000",
   "displayPicture" : "file\/default_photo.jpg",
   "email" : "xiaodi@sina.com",
   "friendList" : {
     "0" : "4de2f17912c98d9fe6e6edff",
     "1" : "4de2f16412c9f8043591a9ad",
     "2" : "4e1c19ad6534f3763c8af129",
     "3" : "4e1c19d66534f3763c8af12a",
     "4" : "4e49d6d365342b1495725318",
     "5" : "4e390dec6534d8a27d58b00a",
     "6" : "4e1e8ada65342af153c7822a"

  }

}

加载中
0
scl33
scl33

在芒果中, 你可以自己定义函数.

你的firendList是个map, 如果是数组的话, javascript中直接用in判断就行了

function findFrined(fid, user){

  return fid in user.friendList;

}

map的话多一行.

function findFriend(fid, user){

  for (var o in user.friendList)

    if (fid == user.friendList[o]) return true;

  return false;

}

0
摩摩
从你贴的文件上来看friendlist貌似不是数组,只是一个embedded document。数组是由中括号([])包起来的
0
摩摩

假设楼主的friendlist是数组,你要查询数组中是否有用户id 12345678.你可以试一下find({"friendlist",12345678});返回的文件应该是包含这个用户id的

0
自在山
自在山

引用来自“摩摩”的答案

从你贴的文件上来看friendlist貌似不是数组,只是一个embedded document。数组是由中括号([])包起来的
是数组,在rockmongo中看起来就是这个样子,多谢各位的解答!我已有思路的
0
自在山
自在山

引用来自“scl33”的答案

在芒果中, 你可以自己定义函数.

你的firendList是个map, 如果是数组的话, javascript中直接用in判断就行了

function findFrined(fid, user){

  return fid in user.friendList;

}

map的话多一行.

function findFriend(fid, user){

  for (var o in user.friendList)

    if (fid == user.friendList[o]) return true;

  return false;

}

我使用JAVA,可能先将其转化为BasicBSONList,再使用containsKey,正在试
返回顶部
顶部