【发布时间】:2021-02-14 03:31:26
【问题描述】:
我正在使用 MongoDB,并表示。 我有一个包含所有国家/地区的集合,包含州和城市。
Picture of a part of the collection
现在, 假设我想获取所有包含“Los”的城市(如“San Antonio”、“San Diego”), 当我使用 Find() - 它返回包含该国所有州和所有城市的所有文档(如上图所示),
我想返回所有文档,但只返回包含值的对象,在数组“cities”内
注意:我希望不同的国家/地区的城市名称中包含部分值。
如何使用 Find() 按我的意愿返回?
她是我正在使用的架构:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const CitiesSchema = new Schema({
capital:{
type: String,
required: true
},
currency:{
type: String,
required: true
},
emoji: {
type: String,
required: true
},
emojiU: {
type: String,
required: true
},
id: {
type: Number,
required: true
},
iso2: {
type: String,
required: true
},
iso3: {
type: String,
required: true
},
name: {
type: String,
required: true
},
native: {
type: String,
required: true
},
phone_code: {
type: String,
required: true
},
region: {
type: String,
required: true
},
states:
[{
cities:[{
id:{
type: Number,
required: true
},
latitude:{
type: String,
required: true
},
longitude:{
type: String,
required: true
},
name:{
type: String,
required: true
},
}],
id:{
type: Number,
required: true
},
name:{
type: String,
required: true
},
state_code:{
type: String,
required: true
},
}]
,
subregion: {
type: String,
required: true
}
});
const Cities = mongoose.model('Cities',CitiesSchema);
module.exports = Cities;
编辑:我的 Find() 代码:
Cities.find({"states.cities.name": city})
.then((data)=>{
return res.json(data);
})
假设我想搜索名称为“Los Santos”的城市。我希望结果是这样的: Picture of the result I expect to be return 相反,我得到了这些国家的所有州和城市 - 这是我不想要的。
更新: 通过使用 $unwind 的聚合,我找到了一种返回数据的方法。
Cities.aggregate([{
$unwind: '$states'
},
{
$unwind: '$states.cities'
},
{
$match: {
'states.cities.name': {$regex: city, $options: "i"}
}
}
],
function (error, data) {
return res.json(data);
})
【问题讨论】:
-
能否帮助展示您当前如何使用 find() 方法?
-
当然,我已添加到我的问题中
-
在 .then 语句之后尝试过滤器怎么样。 Cities.find({"states.cities.name": city}) .then((data)=>{ let city = []; data[0].states.forEach(v =>{ city = cities.concat( v.cities) }); return res.json(cities); 那行得通吗?})
-
不太清楚您希望您的数据如何...可以帮助发布当前结果和预期结果 JSON 吗?
-
抱歉,我添加了一个更清楚的示例来说明我的期望。
标签: reactjs mongodb express mongoose mongodb-query