如何过滤MongoDB集合文档的数组

时间:2018-08-17 13:45:36

标签: javascript mongodb express mongoose mongoose-schema

我是MongoDB的新手,需要帮助。在我的数据库中,我试图创建一个仅包含一个文档的集合。该文档具有一个简单的关键字`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的链接。

因此,我想在这里找到名称为埃里温的城市,但我不知道如何找到它。

2 个答案:

答案 0 :(得分:1)

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

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

findOne将只为您找到一个文档,并在回调中返回它。

看看是否能帮到您。

答案 1 :(得分:0)

使用.filter

例如:

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