【问题标题】:How to filter MongoDB collection document's array如何过滤 MongoDB 集合文档的数组
【发布时间】:2019-01-24 13:55:59
【问题描述】:

我是 MongoDB 新手,需要帮助。在我的数据库中,我试图创建一个集合,它只有一个文档。T 帽子文档有一个简单的键`city,它是一个包含 124247 个对象的数组。这是我的代码

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require("mongoose");
const cities = require('cities.json');
const Schema = mongoose.Schema;
const db = mongoose.connection;
const app = express();

mongoose.connect("mongodb://localhost:27017/cities");

db.once("open", function() {
  console.log("Connection ok.");
})

const cityScheme = new Schema({
  cities: Array
});

const WorldCities = mongoose.model("WorldCities", cityScheme);
const myCities = new WorldCities({
  cities: cities
}).save().then(data => console.log({}.toString.call(data.cities), 'dataaa'));

WorldCities.find({
  name: "Yerevan"
}, function(err, data) {
  console.log(data, 'Armenia');
});
cityScheme.statics.getSearchedcity = function(res) {
  this.find({}, (err, citysList) => res.json({
    citysList
  }));
}

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

app.get('/api/city', (req, res) => {

})

app.listen(3000);

这是 city.json 的链接`Cities.json

所以我想在这里找到名为 Yerevan 的城市,但我不知道如何找到它。

【问题讨论】:

  • 你能分享城市数组的内容吗?里面有没有你要搜索的名字字段?
  • 当然,我编辑添加了。

标签: javascript mongodb express mongoose mongoose-schema


【解决方案1】:

使用.filter

例如:

arrayOfCiteis.filter(myC => myC.name === "Yerevan")

【讨论】:

  • 我很了解过滤方法,我只是不知道如何访问该数组
  • 这对我有用,city.filter(x => x.name === 'Sant Julià de Lòria')。
【解决方案2】:

您正在使用mongoose,从原始数据的外观来看,您似乎只在寻找一个文档......而且您的架构似乎已定义,因此您拥有包含城市对象的cities 属性从你的 JSON 所以:

WorldCities.findOne({
  'cities.name': "Yerevan"
}, function(err, model) {
  // do something with the model here
  console.log(model);
});

findOne 将只为您定位一个文档并在回调中返回它。

看看这是否能让你获得记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2018-01-26
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多