Mongodb returns 所有字段,即使指定了投影
Mongodb returns all fields even with projection specified
更新:
我只想 return 所有符合输入的给定用户名的四个字符的文档。因此,如果我有一个用户名列表并输入 mango3333,则所有以 "mang" 开头的用户名都应该被 returned。我为此使用了正则表达式,现在我只想 return 例如该文档的用户名和 ID,而不是所有字段,但它 return 是所有字段。
示例文档如下所示:
{"_id":{"$oid":"5d75299b0d01830"},
"User":
{ "username":"mango",
"userid":"8b8d25d3-3fe6-4d1c",
"token":"token",
"pw":"password",
"statusmessage":"",
"lastlogin":{"$date":{"$numberLong":"1567959451354"}},
"registered":{"$date":{"$numberLong":"1567959451354"}
}
这是我的查询:
const db = dbClient.db(dbName);
const regexp = new RegExp(username, "gi");
db.collection(collectionName).find({ "User.Username": regexp }, { "User.Username": 1, "User.UserID": 1, "User.Statusmessage": 1 })
.toArray()
.then(result => {
console.log(result);
})
.catch(err => console.error(`Failed to get results: ${err}`));
我做错了什么?
find
方法的第二部分是一个选项对象,而不仅仅是投影。需要在此 options
对象中指定查询的投影部分。尝试以下操作:
db.collection(collectionName).find(
{ "User.Username": regexp },
{
projection: {
"User.Username": 1,
"User.UserID": 1,
"User.Statusmessage": 1
}
}
)
.toArray()
.then(result => {
console.log(result);
})
见https://mongodb.github.io/node-mongodb-native/3.3/api/Collection.html#find
更新:
我只想 return 所有符合输入的给定用户名的四个字符的文档。因此,如果我有一个用户名列表并输入 mango3333,则所有以 "mang" 开头的用户名都应该被 returned。我为此使用了正则表达式,现在我只想 return 例如该文档的用户名和 ID,而不是所有字段,但它 return 是所有字段。
示例文档如下所示:
{"_id":{"$oid":"5d75299b0d01830"},
"User":
{ "username":"mango",
"userid":"8b8d25d3-3fe6-4d1c",
"token":"token",
"pw":"password",
"statusmessage":"",
"lastlogin":{"$date":{"$numberLong":"1567959451354"}},
"registered":{"$date":{"$numberLong":"1567959451354"}
}
这是我的查询:
const db = dbClient.db(dbName);
const regexp = new RegExp(username, "gi");
db.collection(collectionName).find({ "User.Username": regexp }, { "User.Username": 1, "User.UserID": 1, "User.Statusmessage": 1 })
.toArray()
.then(result => {
console.log(result);
})
.catch(err => console.error(`Failed to get results: ${err}`));
我做错了什么?
find
方法的第二部分是一个选项对象,而不仅仅是投影。需要在此 options
对象中指定查询的投影部分。尝试以下操作:
db.collection(collectionName).find(
{ "User.Username": regexp },
{
projection: {
"User.Username": 1,
"User.UserID": 1,
"User.Statusmessage": 1
}
}
)
.toArray()
.then(result => {
console.log(result);
})
见https://mongodb.github.io/node-mongodb-native/3.3/api/Collection.html#find