我正在嘗試從資料庫中獲取所有 id 的串列,但我得到了我不想要的結果。我希望結果是一個陣列。我希望它成為一個串列的原因是我想在另一個查詢中使用它,條件將與這些 id 的資料一起使用,也許有一種方法可以用我得到的結果來做到這一點,但我沒有也不知道怎么做。但如果我能把它作為一個陣列得到,我就能解決它。
這是我的做法
const ids = await Db.find({accountStatus: "active"}).distinct('_id')
結果
[
new ObjectId("6259e7cb9604555d50939cff"),
new ObjectId("6259f9502349309b80f215be"),
new ObjectId("625a7619a4eb4fc6fc3e1507"),
new ObjectId("625bb731a4eb4fc6fc3e1587"),
new ObjectId("625bf74c13a4ee9f4ae9d61d"),
new ObjectId("625c897f363d7af93a6fdd3b"),
new ObjectId("625d2ef668610464781a34a3")
]
期望的結果
[
"6259e7cb9604555d50939cff",
"6259f9502349309b80f215be",
"625a7619a4eb4fc6fc3e1507",
"625bb731a4eb4fc6fc3e1587",
"625bf74c13a4ee9f4ae9d61d",
"625c897f363d7af93a6fdd3b",
"625d2ef668610464781a34a3"
]
讓我知道如何以陣列格式獲得結果。
uj5u.com熱心網友回復:
如果你想擁有一個純 MongoDB 查詢解決方案,你可以這樣做:
Db.aggregate([{
"$match": {
accountStatus: "active"
}
},
{
$project: {
_id: {
$toString: "$_id"
}
}
}])
所有ObjectIds都轉換為字串。我將distinct操作員排除在外,因為無論如何 Id 都必須是唯一的,所以添加它沒有意義。
否則,您可以映射您的結果并轉換 ObjectId:
const ids = (await Db.find({accountStatus: "active"}).distinct('_id'))
.map((id) => id.toString())
uj5u.com熱心網友回復:
根據提供的示例,有多種方法可以達到您想要的結果。我將繼續闡述其中的兩個,一個使用回呼函式,另一個使用 Promise。
方法一
const ids = await Db.find({accountStatus: "active"}).distinct('_id',
function(error, ids) {
// ids is an array of all ObjectIds
let strArr = []; // Initialize empty array
// Iterate through ids
for (let id of ids){
// Push each id into strArr
// Id is formatted as a String by using ObjectId's str attribute
strArr.push(id.str);
}
// Return resulting array
return strArr;
});
方法二
// Storing the db call as a Promise
const dbPromise = await Db.find({accountStatus:"active"}).distinct('_id');
// Solving the Promise (can be solved later in the code)
const ids = dbPromise.then(ids => {
// Same logic as in Method 1
let strArr = [];
for (let id of ids){
strArr.push(id.str);
}
return strArr;
};
有用的讀物??:
- Model.find() 檔案
- db.collection.distinct() 檔案
- ObjectId 檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/459370.html
標籤:javascript json mongodb 目的 猫鼬
