Ich versuche, die Dokumente aus der db in einer Reihenfolge von den meisten Likes am wenigsten zu holen und ich laufe weiter in einen Fehler. Ich habe ein paar Dokumente mit likes von 1, 2 und 3 erstellt und die Reihenfolge, die zurückgegeben wird, ist 2, 3, 1. Es ist wirklich seltsam, denn wenn ich den Server zum ersten Mal starte, funktioniert es gut, aber ich habe das nach etwa 20 gefunden Während ich an meinem Projekt arbeitete (ohne den Code zu berühren, den ich posten wollte), wurde mir klar, dass die Dokumente nicht in der richtigen Reihenfolge zurückgegeben wurden. Könnte das ein Fehler in Meteor sein? Oder ist es ein Problem auf meiner Seite? Wie auch immer, hier ist der Code, in dem ich versuche, die Dokumente in Ordnung zu bringen.Mongo Sortierung nicht Daten in der Reihenfolge
renderNotesByLike.js
import React from "react";
import { Tracker } from "meteor/tracker";
import { Link, withRouter } from "react-router-dom"
import { Notes } from "./../../methods/methods";
class RenderNotesByLike extends React.Component{
constructor(props){
super(props);
this.state = {
notes: []
};
}
renderNotes(notes){
return notes.map((note) => {
return(
<div key={note._id} className="note-list" onClick={() => {this.props.history.push(`/fullSize/${note._id}`)}}>
<div className="left inline">
<p><strong>{note.title}</strong></p>
<span className="removeOnSmallDevice">{note.userEmail}</span>
</div>
<div className="right inline">
<span>Subject: <strong>{note.subject}, {note.unit}</strong></span>
<br />
<span className="removeOnSmallDevice">⬆ {note.likes.length} ⬇ {note.dislikes.length}</span>
</div>
</div>
)
})
}
componentDidMount() {
this.tracker = Tracker.autorun(() => {
Meteor.subscribe('notes');
const notes = Notes.find({subject: this.props.subject}, {sort: {likes: -1}}).fetch();
notes.map((note) => {console.log(note.likes.length)})
this.setState({ notes })
});
}
componentWillReceiveProps(nextProps) {
this.tracker = Tracker.autorun(() => {
Meteor.subscribe('notes');
const notes = Notes.find({subject: nextProps.subject}, {sort: {likes: -1}}).fetch();
this.setState({ notes });
});
}
componentWillUnmount() {
this.tracker.stop()
}
render(){
return(
<div className="center">
{this.renderNotes(this.state.notes)}
</div>
)
}
}
export default withRouter(RenderNotesByLike);
Die Veröffentlichung für notes
ist ziemlich einfach:
Meteor.publish('notes', function() {
return Notes.find()
});
ich erkennen, dass ein mögliches Problem, da würde ich alle Noten bin veröffentlichen, und ich habe um diejenigen zu veröffentlichen, die gefiltert werden sollen. Aber ich habe es genau so gemacht mit der CreatedAt
Eigenschaft und das funktioniert ganz gut.
Beispieldaten
cloudinaryData:
{data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
createdAt:
1506224240000
description:""
dislikes:[]
imageURL:["AImageURL.jpg"]
likes:["[email protected]"]
subject:"Food"
title:"a"
unit:"a"
userEmail:"[email protected]"
userId:"rSGkexdzzPnckiGbd"
_id:"GPJa8qTZyDHPkpuYo"
__proto__:Object
Hinweise Schema:
"notes.insert"(noteInfo){
noteInfo.imageURL.map((url) => {
const URLSchema = new SimpleSchema({
imageURL:{
type:String,
label:"Your image URL",
regEx: SimpleSchema.RegEx.Url
}
}).validate({ imageURL:url })
})
Notes.insert({
title: noteInfo.title,
subject: noteInfo.subject,
description: noteInfo.description,
imageURL: noteInfo.imageURL,
userId: noteInfo.userId,
userEmail: noteInfo.userEmail,
unit: noteInfo.unit,
likes: [],
dislikes: [],
createdAt: noteInfo.createdAt,
cloudinaryData: noteInfo.cloudinaryData
})
console.log("Note Inserted", noteInfo)
}
Können Sie Ihr 'Notes' Schema und Datenbeispiel zeigen? – Styx
@Styx aktualisiert über –