MongoDB:通过数组中的一个 objectId 查找

Avi*_*ger 3 javascript mongoose mongodb node.js

我在查询数据库时遇到问题,我想获取所有元素,例如:admins 数组中的 admin "54bd13864ec56c7c12310a79",

用“$in”试过了,但没有用,这可能与它是一个ObjectId的事实有关吗?

trainerId = '54bd13864ec56c7c12310a79'
GroupSchema.find({'admins': { $in: [ trainerId ] }}
Run Code Online (Sandbox Code Playgroud)

这是我的数据库:

{
   "_id" : ObjectId("54b93e8e3801ae381e3433be"),
   "groupName" : "Developers Groups",
   "createdBy" : "Ido",
   "creationDate" : "Jan 16 2015",
   "users" : [ 
       ObjectId("54b932c7ac3ec34a85e6246c")
   ],
   "admins" : [ 
       ObjectId("54b932c7ac3ec34a85e6246c"), 
       ObjectId("54bd13864ec56c7c12310a79")
   ],
   "__v" : 0
}
Run Code Online (Sandbox Code Playgroud)

Schema 模型是:

module.exports = mongoose.model('Groups' ,
{
    groupName: String,
    createdBy: String,
    creationDate: String,
    admins: [{ type : mongoose.Schema.Types.ObjectId, ref: 'Users' }],
    users: [{ type : mongoose.Schema.Types.ObjectId, ref: 'Users' }]
}
);
Run Code Online (Sandbox Code Playgroud)

chr*_*dam 8

将 id 字符串转换为 ObjectId:

var mongoose = require('mongoose'),
    trainerId = '54bd13864ec56c7c12310a79';
var id = mongoose.Types.ObjectId(trainerId);

GroupSchema.find({'admins': id });
Run Code Online (Sandbox Code Playgroud)


Max*_*nko 5

这是对象 ID:

ObjectId("54bd13864ec56c7c12310a79")

这是字符串:

trainerId = '54bd13864ec56c7c12310a79'

所以也许您应该在查询中使用 ObjectId。