gpt4 book ai didi

Javascript 对象 - 整体对象缺少的功能,但存在

转载 作者:行者123 更新时间:2023-11-30 06:29:52 24 4
gpt4 key购买 nike

奇怪的问题。我正在运行 Node/Express/Mongoose/Leaflet。我从我的数据库中提取了一组位置,一旦启动回调,我就会遍历这些位置以找到一堆处理每个位置的字符串段落。然后,我尝试将段落数组附加到每个位置对象,然后将位置数组附加到 GeoJSON FeatureCollection。

Location.find({}, { _id: 0 }, function (err, locations) {
if (err) {
console.log('DB Error loading all locations');
res.redirect('/');
} else {
var num = 0;
console.log("Beginning finding all passages");
locations.forEach(function (location) {
num++;
console.log("Looking up a location");
Passage.find({"placekey": location.properties.placekey}, function (err, passages) {
if (err) {
console.log('DB Error finding passage for: ' + location.properties.placekey);
} else {
console.log("Passage was found!");
location.properties.passages = passages[0]; //take first passage
num--;
}
if (num === 0) {
console.log("All passages were found!");
var featureCollection = {
"type": "FeatureCollection",
"features": locations
};
console.log(featureCollection);
console.log(featureCollection.features[0].properties);
console.log(featureCollection.features[0].properties.passages);
res.json(featureCollection);
console.log("JSON sent over!");
}
});
});

记录 featureCollection 得到我的 featureCollection 而没有任何段落:

{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {
"num_books": 62,
"Age": "Built 1078",
"ID": "",
"num_mentions": 325,
"Place": "The Tower",
"placekey": "TheTower",
"GeocodeNotes": "",
"Notes": "Built on the site of Roman fortifications, the central part of the Tower, known as the White Tower, was built in 1078 by William the Conqueror. Subsequent rings of fortification were added later. It was used as a royal residence as well as a prison and place of execution until Elizabethan times. England's child king, Edward V, and his brother were murdered in the Tower in 1483 supposedly by their uncle, Richard III.",
"Class": "n/a",
"Type": "Landmark"
},
"geometry": {
"type": "Point",
"coordinates": [
-0.076111,
51.508056
]
}
},
// more objects

没有段落属性。

但是,当我使用 console.log(featureCollection.features[0].properties.passages) 时,我得到了第一段:

 {
"_id": "51deebdbb2b5de1b8b6d7da1",
"index": 27100,
"bookid": 1,
"author": "Ainsworth, William",
"place": "The Tower",
"placekey": "TheTower",
"query_ok": true,
"year": 1839,
"corpus": "Chadwyck",
"fn": "/Volumes/LilaData1/Plain2/Chadwyck/lilaBookId_00149.txt",
"context_a": "The course of the carpenter's meditations was here...
//more features
}

此外,使用(如果 featureCollection.features[0].properties 中的“passages”)给了我真实的信息。事实上,我可以设置从服务器向其发送 JSON 响应的条件,并且我的没有段落的 featureCollection 将被发送...

抱歉这篇冗长的帖子,但我真的为此疯狂。有任何想法吗?

谢谢! :)

最佳答案

问题是 Document 上定义的检查干扰了 console.log 操作。此检查不考虑添加到文档实例的属性(如 documentinst.prop=1)。

要解决您的问题,请尝试在返回文档上使用 toJSON,然后将属性附加到返回对象

在你的情况下,

var _locations = [];

locations.forEach(function(_location){ // actual mongoose document

var location;

location = _location.toJSON(); // do toJSON on the _location mongoose document

_locations.push(location); //push this object into the new array _locations

....logic for passages...

//imp - add properties to the location object return from toJSON

if (num === 0) {
...
var featureCollection = {
"type": "FeatureCollection",
"features": _locations // use the new _locations array
};

...
}

});

关于Javascript 对象 - 整体对象缺少的功能,但存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com