从 mongodb 检索数据时排除某些数据无效
excluding some data while retrieving data from mongodb is not working
我正在使用 mongodb nodejs 驱动程序。
const res = await chats.findOne({ _id: chatId }, { messages: 0, _id: 0 });
这就是我得到的回应,我不想在收到的数据上得到 messages
和 _id
属性
{
"_id": "d0fff742-4af5-4e6a-bd51-9aa47da08fb9",
"messages": "ea678ca7-81fb-479b-89f8-7995d8831992",
"lastMessage": {
"content": "Hey, how's it?",
"sender": "urtheaman"
}
}
}
collection.find(query, options)
$slice 也不起作用。我认为整个选项参数都不起作用。
const res = await messages.findOne(
{ _id: messagesId },
{ messages: { $slice: [from, 15] }, _id: 0 }
);
您应该取回整个文档,然后拥有您自己的函数以对您有用的方式处理该数据。
你可以
function getLastMEssage (data){
return data.lastMessage.content
}
尝试使用:
const res = await chats.findOne({ _id: chatId }, { messages: 1, _id: 1 });
如果你想要一个字段,确保它是另一个 0。
文档说
您可以指定要包含的字段或要保留的字段,但不能同时指定。例如,以下投影是无效的,因为它同时包含名称字段并保留地址字段
// Invalid
// Can't simultaneously include and withhold
{ "name": 1, "address": 0 }
// Valid
// Can exclude _id while including other fields
{ "_id": 0, "name": 1 }
我只是一次预扣,没有同时做但还是不行。
你应该像这样使用投影:
var cursor = client
.db('so')
.collection('sample')
.find()
.project({ _id: 0, messages: 0 });
await cursor.forEach(console.dir);
// { lastMessage: { content: "Hey, how's it?", sender: 'urtheaman' } }
您可以看到完整的示例可运行文件here。
此外,我建议您应该使用 mongoose 而不是 mongo 节点驱动程序以获得更好的开发体验。
我正在使用 mongodb nodejs 驱动程序。
const res = await chats.findOne({ _id: chatId }, { messages: 0, _id: 0 });
这就是我得到的回应,我不想在收到的数据上得到 messages
和 _id
属性
{
"_id": "d0fff742-4af5-4e6a-bd51-9aa47da08fb9",
"messages": "ea678ca7-81fb-479b-89f8-7995d8831992",
"lastMessage": {
"content": "Hey, how's it?",
"sender": "urtheaman"
}
}
}
collection.find(query, options)
$slice 也不起作用。我认为整个选项参数都不起作用。
const res = await messages.findOne(
{ _id: messagesId },
{ messages: { $slice: [from, 15] }, _id: 0 }
);
您应该取回整个文档,然后拥有您自己的函数以对您有用的方式处理该数据。
你可以
function getLastMEssage (data){
return data.lastMessage.content
}
尝试使用:
const res = await chats.findOne({ _id: chatId }, { messages: 1, _id: 1 });
如果你想要一个字段,确保它是另一个 0。
文档说
您可以指定要包含的字段或要保留的字段,但不能同时指定。例如,以下投影是无效的,因为它同时包含名称字段并保留地址字段
// Invalid
// Can't simultaneously include and withhold
{ "name": 1, "address": 0 }
// Valid
// Can exclude _id while including other fields
{ "_id": 0, "name": 1 }
我只是一次预扣,没有同时做但还是不行。
你应该像这样使用投影:
var cursor = client
.db('so')
.collection('sample')
.find()
.project({ _id: 0, messages: 0 });
await cursor.forEach(console.dir);
// { lastMessage: { content: "Hey, how's it?", sender: 'urtheaman' } }
您可以看到完整的示例可运行文件here。
此外,我建议您应该使用 mongoose 而不是 mongo 节点驱动程序以获得更好的开发体验。