我有这样的架构,并希望得到给定userName和_id的用户对象:
{
"_id":ObjectId("5cb7267d7ea090083be865c6"),
"name": test,
"users":[
{
"userName": "user1",
"role": "admin"
},
{
"userName": "user2",
"role": "basic"
}]
},
{
"_id":ObjectId("5cb7267d7ea090083be865c7"),
"name": test,
"users":[
{
"userName": "user3",
"role": "admin"
},
{
"userName": "user4",
"role": "basic"
}]
}
我根据Mongo官方文档尝试了以下查询:
db.users.find( { _id: new ObjectId(5cb7267d7ea090083be865c6) },
{ users: { $elemMatch: { userName: 'user1' } } } )
我正在使用typescript并获取以下错误消息,但不知道如何继续:
Argument of type '{ users: { $elemMatch: { userName: string; }; }; }' is not assignable to parameter of type 'FindOneOptions'.
Object literal may only specify known properties, and 'users' does not exist in type 'FindOneOptions'.
我认为你不小心添加了不必要的括号,并将{users: {...}}
作为options argument传递。这就是你的代码无法编译的原因。试试这个:
db.users.find( {
_id: new ObjectId(5cb7267d7ea090083be865c6),
users: { $elemMatch: { userName: 'user1' } }
});